繁体   English   中英

java三元运算符

[英]java ternary operator

有人可以解释为什么这个代码?

Collection c = (5 == 5) ? new ArrayList() : new HashSet();

产生以下编译器错误:

不兼容的条件操作数类型ArrayList和HashSet

由于我不理解的原因,以下修复了该问题

Collection c = (5 == 5) ? (Collection) new ArrayList() : new HashSet();

我正在使用Java 1.4。

这是1.4中的一个错误 ,并已根据bugreport 5080917修复

评价这是一个错误。

xxxxx @ xxxxx 2004-07-30

丹尼尔或多或少得到了这个权利,但已经删除了他的答案(五票)。

来自2nd Ed JLS的相关引用(1.2-1.4)

  • 如果第二个和第三个操作数具有不同的引用类型,则必须可以通过赋值转换(第5.2节)将其中一种类型转换为另一种类型(称为后一种类型T); 条件表达式的类型是T.如果两个类型的赋值与另一个类型不兼容,则它是编译时错误。

其中一种类型需要转换为另一种类型,而ArrayListHashSet则不然,但是对于CollectionHashSet以及ArrayListCollection都是如此。

在第三Ed JLS(1.5+)

  • 否则,第二和第三操作数分别是S1和S2类型。 设T1是将拳击转换应用于S1所产生的类型,让T2为应用到S2的装箱转换所产生的类型。 条件表达式的类型是将捕获转换(第5.1.10节)应用于lub(T1,T2)(第15.12.2.7节)的结果。

这是显而易见的事情,因为事实证明更难以指定和实现(当其中一个表达式为void时,我无意中得到了javac的早期版本崩溃)。 IIRC,这是作为仿制药的一部分完成的工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM