问题标签 [diamond-operator]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 为什么 Java 7 菱形运算符不能与匿名类一起使用?
考虑这个试图实例化一些List
s 的 Java 代码:
list1
并且list2
直截了当;list2
使用 Java 7 中的新菱形运算符来减少类型参数的不必要重复。
list3
是list1
使用匿名类的一种变体,可能会覆盖ArrayList
.
list4
尝试使用菱形运算符,类似于list2
,但这是一个编译错误,消息'<>' cannot be used with anonymous classes。
list5
产生一个错误,证明编译器知道实际需要什么类型。错误消息是Type mismatch: cannot convert from new ArrayList<Integer>(){} to List<String>
那么,有了 的声明list4
,为什么菱形运算符不能与匿名类一起使用呢?这里有一个类似的问题,其中包含来自JSR-334的以下解释的已接受答案:
不支持将 diamond 与匿名内部类一起使用,因为这样做通常需要对类文件签名属性进行扩展以表示不可表示的类型,这是事实上的 JVM 更改。
我需要一些帮助来理解这个推理。为什么显式类型与相同且显然很容易推断的类型需要在生成的类文件中存在任何差异?“一般情况下”将涵盖哪些困难的用例?
造成这种情况的根本原因是什么?
java - 菱形速记语法不起作用javac
当我编译这个:
在 Eclipse Java EE Kepler 版本中,一切正常,但是一旦我尝试在终端中编译相同的程序
javac myProgram.java
在命令行中,我在 <> 上收到“非法类型开始”错误
我知道 Diamond Shorthand 是 java 7 自带的,那么为什么终端会使用 java 6 而不是 7 的 javac?我该如何永久纠正这个问题?我在 Linux 上,Mint 15。
运行 javac -version 揭示了这一点
java - 为什么在 Java 7 的右手边没有错过 Diamond 运算符?
Java 7 改进了菱形运算符
在 Java 6 中
在 Java 7 中
在 Java 7 中,类型已从右侧 (RHS) 的菱形运算符中删除。我的问题是为什么不从 RHS 移除完整的钻石操作。我知道它会抛出警告,但 java 7 也可以删除警告。
我的想法背后的逻辑:-正如我们已经定义的那样,地图将在 LHS 上使用 Map myMap 将字符串作为键和对象。有了这个编译器有足够的信息。那么,如果您完全错过了钻石运算符,为什么它会发出警告呢?我确信这背后一定有原因,但我不明白?
java - 类型参数在泛型对象实例化的构造函数中有用吗?
我知道从 Java 7 开始,在实例化期间在构造函数中重复泛型类的类型是一种冗余。但是菱形运算符 <> 怎么样,是否可以重复它?换句话说,我想知道这之间有什么区别:
和这个
或这个
和这个
先感谢您
java - 带有菱形运算符的通配符
如果我想做这样的事情:
然后代码编译并运行良好,但是创建了哪种类型ArrayList
?
在这一行之后,如果我这样做了:
它给出了编译错误:
这是什么错误,将菱形运算符与通配符一起使用是否很好?如果是,那么在哪里???
java - java 7 功能不适用于 java 版本“1.7.0_51”的 ubuntu
据此,java -version
我的 Ubuntu Java 环境是这样的:
我javac -version
的是:
如何更改我的 javac 版本?感谢@SotiriosDelimanolis 的提示。;) (如果您正在阅读这篇文章并且遇到同样的问题,请阅读评论。我链接到描述如何在 ubuntu 上执行此操作的页面)。
我正在尝试运行以下程序:
我在尝试编译时收到这些错误:
这些错误似乎不应该是错误。第一个错误表明在 Java 7 中发现的菱形符号语法不正确,或者当它正确时。此错误在评论中显示为上面的 1。
在 try 块中创建 Scanner 对象产生的其他错误是对资源的尝试,这也是 Java 7 的一个特性。此行在源代码中上面标有 2。
有谁知道我错过了什么?
java - Java 7 菱形运算符和派生类的初始化
有一个 Holder 类来保存一些使用泛型创建的对象。在 main() 中,当使用菱形运算符初始化时,它不会编译(Java 7),派生类传递给 Holder 的构造函数(需要 A / found B):
但是如果在右侧指定了基本类型,它就会编译并工作:
为什么?菱形运算符不使用与左侧相同的类型参数定义赋值的右侧部分吗?
java - 如何在 IDEA 中使用 -source
我怎样才能解决这个问题?当我尝试编译一些代码时,我收到以下消息:
在我的电脑上,我有这个设置,我使用 IDEA:
我究竟应该怎么做才能编译它?我应该在哪里放置'-source 7'?
java - Java 1.7 不合逻辑的编译错误:'<>' 运算符
我正在使用 Eclipse EE IDE 2.0.1,我有两个 Java 项目 A 和 B。项目 B 作为 jar 文件添加到项目 A。然后项目 A 在 Tomcat 服务器上运行。
运行 A 时,一旦 A 访问 B,我就会得到异常:
(1) 我已经将两个项目的 Project Facets 和 Java Compiler 都设置为 1.7,服务器运行时环境也是 1.7。我已经将我能找到的所有内容都设置为 Java 1.7,包括此处描述的所有步骤:Diamond operator(<>) not working in java 1.7
(2) 在我的代码中,'<>' 运算符没有这样的存在。我总是在菱形括号内定义类型。(见异常截图)
所以现在我认为错误不在于我的源代码......但是这里发生了什么?
编辑:当只是运行项目 B 时没有这样的错误。
java - Why does the diamond operator not work for java.util.Collections methods in Java 7?
In Java 1.7.0_55, if I write this field declaration, I get a compilation error ("incompatible types"):
If I change that to read:
It compiles fine. (I'm using synchronizedMap as an example here, but the same is true for other Collections methods, unmodifiable*, synchronized*, etc)
But why does the diamond operator not work as I would expect here? Since Collections.synchronizedMap() is declared as:
It would seem to me that the type parameters of the constructor invocation must be the same as those of the field declaration, and the compiler should be able to infer the constructed class type parameters based on that.
I tried looking for a clause in the JLS which says this syntax is unacceptable, but I can't find one. Can anyone point me to it?