您的位置:首页 > 编程语言 > Java开发

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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: