【发布时间】:2017-09-16 06:58:15
【问题描述】:
JLS 版本 8 中的Table 15.25-B 表示条件表达式的类型
true ? null : 0.0
是lub(null,Double),其中lub 似乎是section 4.10.4 的一些疯狂难以理解的东西。
这似乎与Double 类型不同,或者他们可能只是写Double,就像他们在表格中的其他地方所做的那样。不过,目前尚不清楚可能有什么不同。我试图从第 4.10.4 节中解决它,但是当我到达关于的部分时
设 lub(U1 ... Uk) 为:
最佳(W1) & ... & 最佳(Wr)
他们好像在说这种类型是 null 和 Double 类型的 交集类型,这没有任何意义。
lub(null, Double) 是什么?如果它的类型被定义为Double,具有这种类型的条件表达式的行为有何不同?
【问题讨论】:
-
我认为它和
Double一样,就像表中的所有bnp(X, Y)也没有被评估。 -
@kennytm:很多
bnps 实际上不能折叠,因为它们表示special handling when one operand is a constant expression of typeint。这让我不敢假设lubs 可以折叠。 -
这种情况在表中表示为
byte | bnp(int,byte),而不仅仅是bnp(int, byte)。 -
是的,它只是说
bnp(x, y)而不是x | bnp(y, z)的那些似乎可以简化为普通类型,所以也许lub(null, Double)确实简化了。 -
当我收到
null & Double的 lub 时,我想我知道哪里出了问题。如果我目前的理解是正确的,4.10.4 中的lub定义确实将lub(null, Double)解析为Double。
标签: java types language-lawyer