使用Java var关键字的缺点

问题描述

一位演讲者刚刚引用到将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创建的唯一问题是在代码审查期间令人头疼。

恕我直言,至少。