java 通用类型_java-通用类型和通配符类型之间的区别

第一个签名说:list1是一个ES列表。

第二个签名说:list是某种类型的实例的List,但是我们不知道类型。

当我们尝试更改方法时,区别变得明显,因此它需要第二个参数,该参数应添加到方法内部的列表中:

import java.util.List;

public class Experiment {

public static void funct1(final List list1, final E something) {

list1.add(something);

}

public static void funct2(final List> list, final Object something) {

list.add(something); // does not compile

}

}

第一个效果很好。 而且您不能将第二个参数更改为可以实际编译的任何参数。

实际上,我只是发现了一个更好的区别说明:

public class Experiment {

public static void funct1(final List list) {

list.add(list.get(0));

}

public static void funct2(final List> list) {

list.add(list.get(0)); // !!!!!!!!!!!!!! won't compile !!!!!!!!!

}

}

一个可能是为什么为什么我们只需要限制我们可以做的事情时才需要add(就像@Babu_Reddy_H在评论中所做的那样)。 我看到了通配符版本的以下好处:

调用者不必对传入的对象有所了解。例如,如果我有一个列表列表:add我可以将其值传递给您的函数,而无需指定列表元素的类型。 所以

如果我分发像这样参数化的对象,则会积极地限制人们对这些对象的了解以及它们可以做什么(只要他们远离不安全的铸造)。

当我将它们组合时,这两个是有意义的:add。例如,请考虑方法get,该方法将两个输入列表合并为一个新的结果列表。 当然可以引入另外两个类型参数,但是为什么要这么做呢? 这将超过指定的东西。

最后,通配符可以具有下限,因此使用列表可以使add方法起作用,而get则没有任何用处。 当然,这引发了下一个问题:为什么泛型没有下界?

有关更深入的答案,请参见:何时使用通用方法以及何时使用通配符? 和[http://www.angelikalanger.com/GenericsFAQ/FAQSections/TypeArguments.html#FAQ203]

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值