一位演讲者刚刚提到 var
是有用的语法糖(对齐变量名)。我想我会检查一下然后发现。。。
List<String> list = new ArrayList<>(); // IMO this is safer future-proof coding
list.add("HELLO WORLD");
... 生成具有 invokeinterface
派遣。。。
11: invokeinterface #12, 2 // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
转换为java 10+ var
...
var list = new ArrayList<>();
list.add("HELLO WORLD");
... 生成具有 invokevirtual
派遣。。。
11: invokevirtual #12 // Method java/util/ArrayList.add:(Ljava/lang/Object;)Z
我是否应该关心,比如说,批量升级整个应用程序的源代码 var
? e、 g.敏感区域会变慢(或更快?!鉴于 invokeinterface
包括更多的步骤?)除此之外,还有其他非技术性的影响吗(例如,我看到一个关于离线代码检查的清晰性的有趣评论)
2条答案
按热度按时间2j4z5cfb1#
字节码不同的原因是
var
声明推断类型ArrayList
而不是List
. 这相当于你在写作ArrayList<String> list = new ArrayList<>();
明确地。所以如果你不担心改变List
至ArrayList
在变量声明中,不必担心将其更改为var
任何一个。wr98u20j2#
这是java,不是php:)所以,如果我是你,我就不会担心了。唯一可能发生的事情是它不会编译,您需要将var“还原”为类型化变量。
var造成的唯一问题是代码审查期间的头痛。
至少是这样。