java泛型如何保证下界_Java泛型通配符,上下界。

为了理清楚泛型的通配符和上下界的作用,并为了Kotlin的泛型中的关键字in和out的理解,在此用小demo重新梳理一遍对泛型的理解。

demo

public class Example {

//程序入口

public static void main(String[] args) {

Source extends Number> sourceOfNumber = new Source<>();

Number params = sourceOfNumber.getParams();//get()方法,通过编译

sourceOfNumber.setParams(1);//①set()方法,不通过编译

Source super Integer> sourceOfParentOfInt = new Source<>();

sourceOfParentOfInt.setParams(new Integer(1));//set()方法,通过编译

Number i = sourceOfParentOfInt.getParams();//②get()方法,不通过编译

}

//包装对象

private static class Source {

private T params;

public T getParams() {

return params;

}

public void setParams(T params) {

this.params = params;

}

}

}

以下来自《疯狂Kotlin讲义》并结合上述代码的理解。

通配符下界Source super Integer>

在这里,T就是? super Integer。由于Source中的泛型一定是Integer的父类,因此程序总是可以向Source对象传入Integer值。但从Source中取出对象是不安全的,因为无法预测到取出的是Number对象还是Object对象,即无法判断demo中的sourceOfParentOfInt引用的对象实际是Source还是Source。

因此往对象中设置值总是安全的,取出值总是不安全的。

通配符上界Source extends Integer>

在这里,T就是? extends Number。由于Source中的泛型一定是Number的子类,因此程序从Source对象中取出的T一定是Number的子类,即可以用Number来引用。但是向其中传入对象是不安全的,因为你不能确定demo中的sourceOfNumber引用的到底是Source还是Source,如果是引用了Source对象,而你往里面传了一个Integer,那么程序就出错了。

因此从对象中取出值是安全的,但是往对象中设置值是不安全的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值