java没有参数_为什么Java类型参数没有下限?

我认为你不能将Java泛型类型参数绑定到下限(即使用super关键字)。我正在阅读Angelika Langer泛型常见问题解答对此主题的看法。他们说,这基本上可以归结为无用的下限(“没有任何意义”)。

我不相信。我可以想象它们的用途是帮助你更灵活地调用产生类型化结果的库方法的调用者。想象一下一个方法,该方法创建了用户指定大小的数组列表,并用空字符串填充了该列表。一个简单的声明是

public static ArrayList createArrayListFullOfEmptyStrings(int i);

但这不必要地限制你的客户。他们为什么不能像这样调用你的方法:

//should compile

List l1 = createArrayListFullOfEmptyStrings(5);

List l2 = createArrayListFullOfEmptyStrings(5);

List l3 = createArrayListFullOfEmptyStrings(5);

//shouldn't compile

List l4 = createArrayListFullOfEmptyStrings(5);

在这一点上,我很想尝试以下定义:

public static List createArrayListFullOfEmptyStrings(int size) {

List list = new ArrayList(size);

for(int i = 0; i < size; i++) {

list.add("");

}

return list;

}

但是不会编译。super在这种情况下,关键字是非法的。

我上面的例子是不好的例子吗(忽略我在下面说的话)?为什么下限在这里没有用?而且,如果有用的话,Java不允许使用的真正原因是什么?

P.S.

我知道更好的组织可能是这样的:

public static void populateListWithEmptyStrings(List super String> list, int size);

List list = new ArrayList();

populateListWithEmptyStrings(list, 5);

出于这个问题的目的,我们可以假装由于一项要求而需要在一个方法调用中同时执行这两种操作吗?

编辑

@Tom G(合理地)询问a相List对于a有什么好处List。首先,没有人说返回的列表是不可变的,所以这是一个优点:

List l2 = createArrayListFullOfEmptyStrings(5);

l2.add(new StringBuilder("foo").append("bar"));

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值