1.泛型的基础概念
泛型实现了参数化类型的概念,使代码可以应用于多种类型。
- 简单泛型
public class Hold<T> {
private T a;
public Hold(T a){
this.a = a;
}
public T getA() {
return a;
}
public void setA(T a) {
this.a = a;
}
}
- 泛型接口
public interface Generator<T> {
T test();
}
- 泛型方法
public class Hold{
public <T> void f(T a){
System.out.println(a.getClass().getName());
}
}
2.泛型的擦除
考点:在泛型代码内部,无法获得任何有关泛型参数类型的信息。
- 考题1
class c1 = new ArrayList<String>().getClass();
class c2 = new ArrayList<Integer>().getClass();
System.out.println(c1 == c2);
答案:true
- 考题2
class Frob {}
class Fnorkle {}
class Quark<Q> {}
class Particle<POSITION,MOMENTUM> {}
public class LostInformation {
public static void main(String[] args) {
List<Frob> list = new ArrayList<Frob>();
Map<Frob,Fnorkle> map = new HashMap<Frob,Fnorkle>();
Quark<Fnorkle> quark = new Quark<Fnorkle>();
Particle<Long,Double> p = new Particle<Long,Double>();
System.out.println(Arrays.toString(
list.getClass().getTypeParameters()));
System.out.println(Arrays.toString(
map.getClass().getTypeParameters()));
System.out.println(Arrays.toString(
quark.getClass().getTypeParameters()));
System.out.println(Arrays.toString(
p.getClass().getTypeParameters()));
}
}
/* Output:
[E]
[K, V]
[Q]
[POSITION, MOMENTUM]
*///:~
3.泛型的边界
将某个参数限制为某个类型的子集。为了执行这种限制,Java 泛型重用了extends 关键字。
interface HasColor { java.awt.Color getColor(); }
class Colored<T extends HasColor> {
T item;
Colored(T item) { this.item = item; }
T getItem() { return item; }
// The bound allows you to call a method:
java.awt.Color color() { return item.getColor(); }
}
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦