【发布时间】:2019-09-20 03:21:22
【问题描述】:
var test = "Hello World!";
在 Java 10+ 中,上面的 sn-p 编译,test 在编译时被推断为String。
但是,我们可以使用条件(三元)运算符来返回不同的类型,例如:
var test = new Random().nextBoolean() ? "Hello World!" : 123;
如果我们在运行时打印test.getClass(),它会输出:
- 类 java.lang.String
- 类 java.lang.Integer
这是有道理的,但是test 在编译时的类型是什么?是Object,还是别的什么?
【问题讨论】:
-
@Naman 我反对它是重复的,主要是因为我的代码在 Java 12 上编译,甚至在 Java 12 上运行他们的代码(他们说不会编译)编译就好了我。我的问题更多的是,这个变量的编译时类型是什么,为什么?不过,我可以看到两者之间的关系。
-
好吧,当然可以这样做,这也是我实际上没有投票结束它的原因之一。但目前,这个问题及其答案既不相辅相成,也不是很清楚。也就是说,我仍然将其留给社区进一步投票。与链接相关,答案显示该错误已在更高版本的 JDK10 中修复。
-
related 以最后一个示例为例
标签: java var type-inference java-10