问题描述
一位演讲者刚刚引用到将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
批量升级整个应用程序的源代码吗?例如。敏感的部分会变慢(还是变快?!给定invokeinterface
涉及更多的步骤吗?)除此之外,还会有其他非技术性的影响(例如,我对脱机代码查看的清晰度有一个有趣的评论)>
解决方法
字节码不同的原因是因为var
声明推断类型为ArrayList
而不是List
。等效于您显式编写ArrayList<String> list = new ArrayList<>();
。因此,如果您不必担心在变量声明中将List
更改为ArrayList
,也不必担心将其更改为var
。
这是Java,而不是PHP :)因此,如果您是我,我不会担心。唯一可能发生的事情是它将无法编译,您需要将var“恢复”为类型变量。
var创建的唯一问题是在代码审查期间令人头疼。
恕我直言,至少。