静态方法的泛型

    /**
* @description 静态方法的泛型无法使用类定义的泛型,因为类在实例化时才确定具体的泛型类,因此静态方法要使用泛型需要使用泛型方法的方式
*/
public class GenericityTest {
/**
* 泛型方法
*/
public static <T> T getType(T t) {
System.out.println(t.getClass().getName());
return t;
}
}

泛型接口

    interface Super<T>{
void show(T t);
} class Sub<T> implements Super<T>{ @Override
public void show(Object t) {
} }

泛型限定

1.使用?

    /**
* @description 测试泛型限定?
*/
public class Test {
/**
* 泛型限定 --> ? 未知类型
*/
public static void printCollection(Collection<?> coll) {
Iterator<?> it = coll.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
} public static void main(String[] args) {
/**
* 测试泛型限定 ?
*/
ArrayList<String> list = new ArrayList<String>();
for (int i = 0; i < 10; ++i) {
list.add(i + "");
}
printCollection(list);
}
}

2.使用? extends E

    /**
* @description 测试泛型限定<? extends E>
*/
public class Test {
public static void main(String[] args) {
/**
* 测试泛型限定 extends
*/
ArrayList<Programmer<String>> programmers = new ArrayList<Programmer<String>>();
for (int i = 0; i < 10; ++i) {
programmers.add(new Programmer<String>(i + ""));
}
printExtendsCollection(programmers); } /**
* 泛型限定 --> ? extends Object 上限限定,未知类型为Object的子类型
*/
public static <T> void printExtendsCollection(Collection<? extends Super<T>> coll) {
Iterator<? extends Super<T>> it = coll.iterator();
while (it.hasNext()) {
Super<T> t = it.next();
t.show();
}
}
} interface Super<T> {
void show();
} class Programmer<T> implements Super<T> {
private T name; Programmer(T name) {
this.name = name;
} public T getName() {
return name;
} @Override
public void show() {
System.out.println(name);
} }

3.使用? super E

    /**
* @description 测试泛型限定<? super E>
*/
public class SuperETest {
public static void main(String[] args) {
/**
* treeSet构造函数原型 <? super E> 说的是比较器可以为E类型的父类型
*/
/*
public TreeSet(Comparator<? super E> comparator) {
this(new TreeMap<>(comparator));
}
*/
SuperETest test = new SuperETest();
Set<Programmer> programmers = new TreeSet<Programmer>(test.new Comp());
for (int i = 0; i < 10; ++i) {
programmers.add(test.new Programmer(10 - i + ""));
}
for (Programmer teacher : programmers) {
System.out.println(teacher.getName());
} } class Person {
private String name; Person(String name) {
this.name = name;
} public String getName() {
return name;
}
} class Programmer extends Person {
Programmer(String name) {
super(name);
} } class Comp implements Comparator<Person> { @Override
public int compare(Person o1, Person o2) {
return o1.getName().compareTo(o2.getName());
} }
}

【09-03】java泛型学习笔记的更多相关文章

  1. Java泛型学习笔记 - (七)浅析泛型中通配符的使用

    一.基本概念:在学习Java泛型的过程中, 通配符是较难理解的一部分. 主要有以下三类:1. 无边界的通配符(Unbounded Wildcards), 就是<?>, 比如List< ...

  2. Java泛型学习笔记--Java泛型和C#泛型比较学习(一)

    总结Java的泛型前,先简单的介绍下C#的泛型,通过对比,比较学习Java泛型的目的和设计意图.C#泛型是C#语言2.0和通用语言运行时(CLR)同时支持的一个特性(这一点是导致C#泛型和Java泛型 ...

  3. Java泛型学习笔记 - (六)泛型的继承

    在学习继承的时候, 我们已经知道可以将一个子类的对象赋值给其父类的对象, 也就是父类引用指向子类对象, 如: Object obj = new Integer(10); 这其实就是面向对象编程中的is ...

  4. Java泛型学习笔记 - (三)泛型方法

    泛型方法其实和泛型类差不多, 就是把泛型定义在方法上, 格式大概就是: public <类型参数> 返回类型 方法名(泛型类型 变量名) {...}泛型方法又分为动态方法和静态方法,:1. ...

  5. Java泛型学习笔记 - (二)泛型类

    1. 我们先写一个没有泛型的类Box: public class Box { private Object obj; public Box() {} public Object getObj() { ...

  6. Java泛型学习笔记

    泛型是Java5引进的新特征,是类和接口的一种拓展机制,主要实现参数化类型机制.Java的泛型,跟C++的类模板有很多相似的地方,或者说,就是C++类模板的升级版. 泛型类 在开发过程中,我们或许要设 ...

  7. Java泛型学习笔记 - (五)泛型接口

    所谓泛型接口, 类似于泛型类, 就是将泛型定义在接口上, 其格式如下: public interface 接口名<类型参数>如: interface Inter<T> { pu ...

  8. Java泛型学习笔记 - (四)有界类型参数

    1. 当我们希望对泛型的类型参数的类型进行限制的时候(好拗口), 我们就应该使用有界类型参数(Bounded Type Parameters). 有界类型参数使用extends关键字后面接上边界类型来 ...

  9. Java泛型学习笔记 - (一)泛型的介绍

    一.什么是泛型:泛型的作用是用来规定一个类, 接口或方法所能接受的数据的类型. 就像在声明方法时指定参数一样, 我们在声明一个类, 接口或方法时, 也可以指定其"类型参数", 也就 ...

随机推荐

  1. 【转】根据中国气象局提供的API接口实现天气查询

    本文转载自 老三 的 三叶草 中国气象局提供了三个天气查询的API接口: [1]http://www.weather.com.cn/data/sk/101190101.html [2]http://w ...

  2. spring中的定时调度实现TimerFactoryBean引起的隐患

    手中的一个老项目,其中使用的TimerFactoryBean实现的调度任务.一般都是spring quartz实现,这种的着实少见.正因为少见资料比较少,当初为了确认这个会不会2个调度任务同时并行执行 ...

  3. 在 KVM 上安装 Win7 虚拟机

    之前都是在用Linux 虚机,现在有需要用到Win7 虚机,才发现在 KVM 上安装 Win7 的过程远比想象中的复杂.本文就把其过程做个简单总结. 1. 在 Virtual Machine Mana ...

  4. 2016.10.29 NOIP模拟赛 PM 考试整理

    300分的题,只得了第三题的100分. 题目+数据:链接:http://pan.baidu.com/s/1o7P4YXs 密码:4how T1:这道题目存在着诸多的问题: 1.开始的序列是无法消除的( ...

  5. [bzoj1901][zoj2112][Dynamic Rankings] (整体二分+树状数组 or 动态开点线段树 or 主席树)

    Dynamic Rankings Time Limit: 10 Seconds      Memory Limit: 32768 KB The Company Dynamic Rankings has ...

  6. Oracle trunc()函数的用法

    Oracle trunc()函数的用法 /**************日期********************/1.select trunc(sysdate) from dual --2013-0 ...

  7. Win10 Sql2008R2 在关闭【0x80041033】

    以前SQL Server 2008 不能登陆的时候,总是通过“计算机管理”→“SQL Server服务”更改一下,"SQL Server(MSSQLSERVER)".可是现在出现的 ...

  8. nmap报错: Failed to open device ethxxx

    nmap报错:  Failed to open device ethxxx 周银辉 今天用nmap时, 报错:   Failed to open device eth4, 好郁闷. 调查了一下, 是w ...

  9. NPM 无法下载任何包的原因,解决方法

    前几天发现NPM 无法现在任何的包 通过npm i testPackage -ddd 发现 是卡在了 npm verb addRemoteTarball 这行,google后发现 是有多个tmp地址, ...

  10. JS获取回车事件(兼容各浏览器)

    一.用到onkeydown获取事件动作, 二.用到键盘对应代码keyCode, 三. var event=arguments.callee.caller.arguments[0]||window.ev ...