首页 > 代码库 > 《疯狂Java讲义》(二十七)----泛型
《疯狂Java讲义》(二十七)----泛型
- 菱形语法
List<String> strList = new ArrayList<String>();
Java7 后允许在构造器后不需要带完整的泛型信息,只要给出一对尖括号即可。
List<String> strList = new ArrayList<>();
- 泛型接口/类
可以为任何类/接口增加泛型声明
class Apple<T> { private T info; public Apple() { } public Apple(T info) { this.info = info; } public void setInfo(T info) { this.info = info; } public T getInfo() { return this.info; } } public class GenericClassDemo { public static void main(String[] args) { // TODO Auto-generated method stub Apple<String> a1 = new Apple<>("Apple"); System.out.println(a1.getInfo()); Apple<Double> a2 = new Apple<>(5.97); System.out.println(a2.getInfo()); } }
当创建带泛型声明的自定义类,为该类定义构造器时,构造器名还是原来的类名,不要增加泛型声明。例如,Apple<T>,构造器名依然是Apple,不是Apple<T>.
- 从泛型类派生子类
当创建了带泛型声明的接口/父类之后,可以为该接口创建实现类,或从该父类派生子类,但需要指出的是,当使用这些接口/父类时不能在包含类型形参。
class Apple<T> { protected T info; public Apple() { } public Apple(T info) { this.info = info; } public void setInfo(T info) { this.info = info; } public T getInfo() { return this.info; } } class A1 extends Apple<String> { public A1(String info) { this.info = info; } } public class GenericClassDemo { public static void main(String[] args) { // TODO Auto-generated method stub Apple<String> a1 = new Apple<>("Apple"); System.out.println(a1.getInfo()); Apple<Double> a2 = new Apple<>(5.97); System.out.println(a2.getInfo()); A1 aa1 = new A1("Apple"); System.out.println(aa1.getInfo()); } }
不管为泛型的类型参数传入哪一种类型实参,对于Java来说,它们依然被当成同一个类处理。因此在静态方法/静态初始化块或者静态变量的声明和初始化中不允许使用类型形参。
《疯狂Java讲义》(二十七)----泛型
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。