对于Java泛型的理解
源起:查看COLLECIOTNS类
Q1:为什么java需要泛型?
因为java对于对象类型的确认在编译期,那么强制类型转换就可以通过编译,但是运行时的错误却无法避免,那么泛型的存在可以避免强制类型转换的出现。
public class TestGeneric { static A<Integer> setInteger(){ A<Integer>a = new A<Integer>(4); return a; } static A<Number> setNumber(){ A<Number>b = new A<Number>(6); return b; } public static void main(String args[]){ setInteger(); setNumber(); System.out.println("a"+setInteger().getClass()); System.out.println("b"+setNumber().getClass()); } } class A<E>{ private E a; private E b; public E getA() { return a; } public void setA(E a) { this.a = a; } public E getB() { return b; } public void setB(E b) { this.b = b; } public A(E e){ this.a = e; this.b = e; } }
我的理解,泛型作用于一个对象的属性。
Q2:网上谈到A<Number>及B<Integer>是否存在继承关系。我的理解不存在这里泛型作用域类的对象的属性。而不是重新定义这个类。
Q3: 关于泛型通配符的使用。
//使用泛型通配符 static void getA(A<?>a){ System.out.println("通配符使用"+a.getA()); } //设置通配符上限 static void upperGetA(A<? extends Number>a){ System.out.println("通配符上限"+a.getB()); }