我知道我们可以使用“var”关键字在 Kotlin 中定义变量:
var foo = 3
最新的 java 更新(java 10)还引入了“var”类型:
var bar = new int[]{1, 2, 3}; // int[] bar = {1, 2, 3}
我的问题是,这些语言之间使用“var”有什么区别?
它们的含义是非常不同的,即使基本情况下的语法var x = ...最终是相同的:
var在 Kotlin 中的意思是“这是一个可变变量”,并且可以在推断类型和显式时使用var x: String = ...:
var在 Java 中表示“这是一个具有推断类型的变量”,可用于可变和final变量。
var在Java中只能用于局部变量;var在 Kotlin 中也用于属性。
根据 Java 10 的发行说明,它指出:
我们试图通过减少与编写 Java 代码相关的仪式来改善开发人员体验,同时保持 Java 对静态类型安全的承诺,允许开发人员省略通常不必要的局部变量类型的清单声明。例如,此功能将允许以下声明:
var list = new ArrayList<String>(); // infers ArrayList<String>
var stream = list.stream(); // infers Stream<String>
所以基本上,这是为了适应程序员的懒惰;List<String> list = new ArrayList<>();您现在可以省略List<String>, 并将其替换为 ,而不是编写,var从而允许 Java推断是哪种类型list- 它能够做到这一点,因为变量在定义时被初始化。请注意,您必须list在初始化时推断 的类型(在上述情况下,您将添加String到new ArrayList<String>();)。因此,Java 仍然保留其静态类型声明。
与 Kotlin 有什么区别?
用 定义的 Kotlin 中变量的类型var也是推断出来的(但在 的情况下也可以是显式的var foo: Int),并且 Kotlin 也是一种静态类型语言。
var在 Java 10 中可以简化一些声明ArrayList<String>和流的类型。
var只能在 Java 10 的方法中使用。但你可以在 Kotlin 的任何地方编写它
Java 10中没有val关键字,那么我们可以在 Java 10 中使用final varas a val。
(我想我们都知道默认可变和不可变,所以我不会描述它们。)
var在 Intellij IDEA 2018.1+ 中被视为type(JB Lexer) 和(JB Grammar Psi)。keyword
我为 Java 10 var type hints 开发了一个插件来显示它的类型(就像 Kotlin 一样)
