Java泛型解析(01):认识泛型
ArrayList al = new ArrayList(); al.add("ysjian001"); al.add(1); al.add(new Object());这段代码看似功能强大,为什么呢?因为它似乎能够往集合添加各种类型的对象(int 类型会被装箱成 Integer对象类型),貌似一些老程序员也倾向于这么去做,而且他们可以理直气壮的告诉我理由:我这么做想存什么就存什么!先不否定这种说法,让我们继续,看看下面代码。
// 获取值的时候必须进行强制转换,然后调用对应对象的方法 String first = (String) al.get(0);往集合里面存值就是为了后期取出来用的,而不是System.out.println(first),这里就产生了一个强制转换的问题,而往往这种类型的强制转换在编译器是允许通过的,而写程序的人们会犯下无意间的错误,错误的进行了强制转换,导致程序运行失败。
ArrayList al = new ArrayList(); // 无法进行错误检查,File对象可以添加进去,编译器和运行期都可以通过 al.add(new File()); String first = (String) al.get(0); // 类型转换失败导致运行失败
ArrayList<String> al = new ArrayList<String>(); al.add( "ysjian001"); // al.add(new Thread()); // 定义了String类型参数,添加File对象会报错 String first = al.get(0);// 使用泛型后取值不用进行类型转换
public class Employee { //...... } public class Manager extends Employee { // ...... }
ArrayList<Employee> employees = new ArrayList<Employee>(); employees.add(new Employee()); // 可以添加员工 employees.add( new Manager()); // 可以添加经理,因为经理也是员工
ArrayList<Manager> employees = new ArrayList<Manager>(); employees.add(new Manager()); // 添加经理是正常的操作 // employees.add(new Employee()); // 此时不可以添加Employee
public class Couple<T> { private T wife ; private T husband ; public Couple(T wife, T husband) { this.wife = wife; this.husband = husband; } public void setWife(T wife) {this. wife = wife;} public void setHusband(T husband) {this. husband = husband;} public T getWife() {return wife;} public T getHusband() {return husband;} }
public class Couple<T, K, V> {......} // 多个类型参数用逗号隔开 private T wife ; // 类型参数定义域 public T getWife() {return wife;}// 类型参数定义方法返回的类型
Couple<Person>(Person,Person); setWife(Person); setHusband(Person); Person getWife(); Person getHusband();
public class GenericMethod { public static <T> T getFirstValue(T[] values) { return values[0]; } }
String[] values = { "JavaSE","CoreJava" ,"EffectiveJava"}; String firstValue = GenericMethod.<String>getFirstValue(values);
String firstValue = GenericMethod.getFirstValue(values);
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。