java 类的声明语法_在Java中使用奇怪的显式类型参数声明语法

最近我发现了在调用

Java方法时明确声明泛型类型的奇怪语法.例如:

Collections.emptyList();

返回一个空的List< String>.然而,这似乎是愚蠢的,因为< T> emptyList()只是未经检查的类型转换(List< T>)EMPTY_LIST,使得所有结果具有相同的类型擦除(并且是相同的对象).此外,通常不需要这种显式类型声明,因为编译器经常推断类型:

List empty = Collections.emptyList();

在做了一些挖掘之后,我发现了另外两次你想要使用这种语法的时候,他们都是由于使用了Guava库,显然是试图在一行中放置太多的语句.

>装饰集合,例如使用同步包装器,编译器无法推断类型.如果取出类型声明,以下内容将无效:无法从Set< Object>设置< String&gt ;:::

Set set = Collections.synchronizedSet(Sets.newHashSet());

>当编译器尝试使具有特定类型参数时,获取更少的具体类型参数.例如,没有类型声明,以下语句也是抱怨的:不能从Map< String,String>映射< String,Object&gt ;::

Map toJson = ImmutableMap.of("foo", "bar");

我发现讽刺的是,在第一种情况下,推断的类型参数太笼统,在第二种情况下它们太具体,但我认为这只是Java中泛型系统的一个工件.

然而,这种语言结构本身似乎是可以避免的,除了这些strange use cases invented by the Guava team.另外,似乎对我来说,编译器有一种方法来推断上述例子中的类型参数,开发人员只是选择不这样做.在Java编程中使用此构造是否有必要或有用的示例,还是仅存在以使编译器更简单/ JDK开发人员的生活更轻松?

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值