标签:java 泛型 javase java 面向对象 泛型设计
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);
标签:java 泛型 javase java 面向对象 泛型设计
原文地址:http://blog.csdn.net/ysjian_pingcx/article/details/40019183