Java泛型理解

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;
    }
}


转载于:https://my.oschina.net/sharkbobo/blog/270903

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值