java 通配符 日期_java – 何时使用通用方法和何时使用通配符?

有一些地方,通配符和类型参数做同样的事情。但也有一些地方,你必须使用类型参数。

>如果你想对不同类型的方法参数执行一些关系,你不能使用通配符,你必须使用类型参数。

以你的方法为例,假设你想确保传递给copy()方法的src和dest列表应该是相同的参数化类型,你可以使用类型参数,如:

public static void copy(List dest, List src)

在这里,您确保dest和src具有相同的参数化类型为List。因此,可以安全地将元素从src复制到dest。

但是,如果你继续改变方法使用通配符:

public static void copy(List extends Number> dest, List extends Number> src)

它将无法正常工作。在第二种情况下,可以传递List< Integer>和List< Float>作为dest和src。所以,将元素从src移动到dest将不再是类型安全了。

如果你不需要这种关系,那么你可以自由地不使用类型参数。

使用通配符和类型参数之间的其他一些区别是:

>如果你只有一个参数化类型参数,那么你可以使用通配符,虽然类型参数也会工作。

>类型参数支持多个边界,通配符不支持。

>通配符支持上限和下限,类型参数只支持上限。因此,如果要定义一个接受类型为Integer的List或其超类的方法,您可以:

public void print(List super Integer> list) // OK

但是你不能使用类型参数:

public void print(List list) // Won't compile

参考文献:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值