java<>_Java 7中的菱形运算符(<>)有什么意义?

这个问题List list = new LinkedList();

在左侧,您使用的是泛型类型List,在右侧,您使用的是原始类型LinkedList。Java中的原始类型实际上仅存在与前泛型代码的兼容性,并且除非绝对必须,否则不应在新代码中使用。

现在,如果Java从一开始就具有泛型并且没有类型,例如LinkedList,最初在它具有泛型之前创建的类型,它可能已经使得它使得泛型类型的构造函数自动从左侧推断其类型参数 - 如果可能的话,指派的一面。但事实并非如此,它必须以不同的方式处理原始类型和泛型类型以实现向后兼容性。这使得他们需要制作一种稍微不同但同样方便的方式来声明一个通用对象的新实例,而不必重复其类型参数......菱形运算符。

就您的原始示例而言List list = new LinkedList(),编译器会为该分配生成警告,因为它必须。考虑一下:List strings = ... // some list that contains some strings

// Totally legal since you used the raw type and lost all type checking!List integers = new LinkedList(strings);

存在泛型以提供编译时保护以防止做错事。在上面的示例中,使用原始类型意味着您没有获得此保护,并且将在运行时收到错误。这就是你不应该使用原始类型的原因。// Not legal since the right side is actually generic!List integers = new LinkedList<>(strings);

但是,菱形运算符允许将赋值的右侧定义为具有与左侧相同类型参数的真正通用实例,而无需再次键入这些参数。它允许您使用与原始类型几乎相同的努力来保持泛型的安全性。

我认为要理解的关键是原始类型(没有<>)不能被视为泛型类型。声明原始类型时,您不会获得泛型的任何好处和类型检查。您还必须记住,泛型是Java语言的通用部分 ......它们不仅仅适用于Collections 的无参数构造函数!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值