首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我们需要提供两次通用信息?

问为什么我们需要提供两次通用信息?
EN

Stack Overflow用户
提问于 2012-08-31 13:51:35
回答 4查看 179关注 0票数 3

另一个非常基本的问题涉及到Java中的泛型,并直接从previous question of mine中得到。我们不是通过编写下面的代码向编译器提供了两次相同的信息吗?为什么我们既需要在左手边,也要在右手边提供两者?

代码语言:javascript
复制
List<Number> numbers = new ArrayList<Number>();

编辑:正如我在一些答案中所看到的,java 7以后不再需要它了。但是我想知道在java 7之前不可能的原因是什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-08-31 13:53:15

因为pre 7不支持构造函数的泛型类型推断。这在java 7中由菱形操作符解决。

您还可以编写通用工厂方法作为解决办法,如下所示:

代码语言:javascript
复制
 public static <T> List<T> createArrayList() {
      return new ArrayList<T>();
 }

然后

代码语言:javascript
复制
List<Integer> list = createArrayList();

这是有问题的,但有效。而且,对于Maps和其他多论证的泛型类型,也可能会有很好的回报。

编辑:也许语言设计人员决定不支持泛型类型推断,因为他们用类型擦除来实现泛型。另一个有问题的决定,我想.否则,不要认为在早期的java版本中存在任何反对此特性的严重原因。(彼得·劳瑞的增编中,它仍然不存在。)

票数 3
EN

Stack Overflow用户

发布于 2012-08-31 13:53:25

正在引入菱形操作符,以删除此冗余信息。

看看这个,所以链接以及What is the point of the diamond operator in Java 7?

根据我的阅读/理解,我认为泛型在java中做得不太好。那个?最后引入的操作符是一种痛苦的工作。擦除的事实表明,在我看来,它是有角的.它做了这项工作,但我认为这样做会好得多

票数 4
EN

Stack Overflow用户

发布于 2012-08-31 13:54:09

因为一个是参考,一个是实现。行的左边是设置将实例化变量存储在其中的引用。由于Java使用“运行时类型擦除”来实现泛型,因此除了引用赋值之外,没有任何代码可以知道分配了哪些泛型参数。

编辑--我不知道J7中的变化(我有点过时了:) --看起来他们解决了这个问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12216764

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档