Java泛型(generics)是JDK5中引入的一个新特性。
本质就是万能类型。我们定义引用类型的变量需要指定其是什么Class的,使用泛型就可以代替其Class的作用!泛型不支持基本类型。使用时可能会自动装箱!
下面是ArrayList的源码
public class ArrayList<E> extends AbstractList<E>
我们看到:创建ArrayList集合需要我们指定集合元素的类型。我们在集合添加元素的时候,就不能添加与此类型没有直接关系的元素了。所以泛型的好处是:提供了编译器的错误检测。
public class FanXingClass<T> {
// 成员变量,创建对象时,指定成员变量的类型
private T t;
// 代参构造方法
public FanXingClass(T t) {
this.t = t;
}
}
使用泛型类
String s = "Hello!";
FanXingClass fanXingClass = new FanXingClass(s);
// JDK8之后就支持:new后的<>可不填写类名
FanXingClass<String> fanXingClass1 = new FanXingClass<>(s);
泛型使用无参构造的时候,泛型认定为Object!
子类是泛型类的话,子类和父类的泛型类型要一致
/**
* 泛型接口
* @param <T>
*/
public interface Generator<T> {
T getKey();
}
/**
* 泛型接口的实现类,是一个泛型类,
* 那么要保证实现接口的泛型类泛型标识包含泛型接口的泛型标识
* @param <T>
* @param <E>
*/
public class Pair<T,E> implements Generator<T> {
private T key;
private E value;
public Pair(T key, E value) {
this.key = key;
this.value = value;
}
@Override
public T getKey() {
return key;
}
public E getValue() {
return value;
}
}
泛型其实没什么直接用处,我就不一点点记录笔记了。只记录重点内容,与常见的泛型使用场景
编译期的泛型T,在JVM的字节码转换为对应的类型,大部分没声明的都会被被转换为Object!
特殊说明: 以上文章,均是我实际操作,写出来的笔记资料,不会盗用别人文章!烦请各位,请勿直接盗用!转载记得标注来源!