版权声明:随意转载 https://blog.csdn.net/bigcupwater/article/details/76172495
- 把一个对象存储到集合里之后,集合会忘记这个对象的数据类型,当再次取出该对象时,该对象的编译类型就变成了Object类型。
- 泛型的使用:在集合接口、类后面增加尖括号,尖括号里存放放一个数据类型,表明这个集合接口、集合类只能保存特定类型的对象。
- 从Java7开始,允许在构造器后不需要带完整的泛型信息,值需要给出一对尖括号即可。
在定义接口、类时声明类型形参,类型形参在整个接口、类内部可以当成类型来使用,几乎所有可以使用普通类型的地方都可以使用这种类型参数。
public class Apple<T> { private T info; public Apple() { } public Apple(T info) { this.setInfo(info); } public T getInfo() { return info; } public void setInfo(T info) { this.info = info; } public static void main(String[] args) { Apple<String> a1 = new Apple<>("苹果"); System.out.println(a1.info); Apple<Double> a2 = new Apple<>(23.2); System.out.println(a2.info); }
创建了带泛型声明接口、父类之后,为接口创建实现类,从父类派生子类时,不能再包含类型形参,应该传入实际的类型。
- 在静态方法、静态初始化块、或者静态变量声明和初始化中不允许使用类型形参。
- 类型通配符,为了表示各种泛型的父类,可以使用类型通配符(?),将一个问号作为类型实参传给List集合,它的元素类型可以匹配任何类型。
- 设置类型通配符的上限,
java List<? extends Shape>
,此处的问号代表一个未知类型,但是这个未知类型一定是Shape类型的子类型或本身。 - 泛型方法,
java修饰符 <T, S> 返回值类型 方法名(形参列表){方法体}
- 设置类型通配符的下限,
javaList<? Super Shape>
,此处的问号代表一个未知类型,但是这个未知类型一定是Shape类型的父类型或本身。