Java泛型理解
2014-05-30 11:23
309 查看
package basic; public class GenricTest { /** * @Title: Java泛型理解 * @Description: * @param @param args 设定文件 * @return void 返回类型 * @throws */ public static void main(String[] args) { //编译不会报错,因为编译时,会做类型擦除 Pair1<String> p1 = new Pair1("test",1); //首先调用getFirst方法,然后调用getSecond方法 System.out.println(p1.getFirst());//打印test System.out.println(p1.getSecond());//报错 java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String //首先调用getSecond方法,然后调用getFirst方法 System.out.println(p1.getSecond());//报错 java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String System.out.println(p1.getFirst()); //声明时就出错,不能通过编译,因为java根据构造方法里面的第一个参数类型,推导第二个参数类型 //所以,推荐下面这样的写法,避免到运行期才发生错误 Pair1<String> p2 = new Pair1<String>("test",1); //下面这种写法编译器也不会报错,运行时也不会报错 Pair<String,Integer> pair1 = new Pair("test","test"); System.out.println(pair1.getFisrt()); System.out.println(pair1.getSecond()); //下面这种写法也是可以的 Pair<String,?> pair3 = new Pair<String,Integer>("test",123); System.out.println(pair3.getFisrt()); System.out.println(pair3.getSecond()); //不过,还是推荐下面这种写法,第一时间发现错误 Pair<String,Integer> pair2 = new Pair<String,Integer>("test","test"); } } class Pair<T,R>{ private T fisrt; private R second; public Pair(T first,R second){ this.fisrt = first; this.second = second; } public T getFisrt() { return fisrt; } public void setFisrt(T fisrt) { this.fisrt = fisrt; } public R getSecond() { return second; } public void setSecond(R second) { this.second = second; } } class Pair1<T>{ private T first; private T second; public Pair1(T first,T second){ this.first = first; this.second = second; } public T getFirst() { return first; } public void setFirst(T first) { this.first = first; } public T getSecond() { return second; } public void setSecond(T second) { this.second = second; } }