java 10 和 kotlin 中的“var”
“var” in java 10 and kotlin
我知道我们可以在 Kotlin 中使用“var”关键字来定义变量:
var foo = 3
最新的java更新(java10)也引入了“var”类型:
var bar = new int[]{1, 2, 3}; // int[] bar = {1, 2, 3}
我的问题是,这些语言在使用“var”时有什么区别?
根据Java 10的release notes,它指出:
We seek to improve the developer experience by reducing the ceremony
associated with writing Java code, while maintaining Java's commitment
to static type safety, by allowing developers to elide the
often-unnecessary manifest declaration of local variable types. This
feature would allow, for example, declarations such as:
var list = new ArrayList<String>(); // infers ArrayList<String>
var stream = list.stream(); // infers Stream<String>
所以基本上是为了适应程序员的懒惰;您现在可以省略 List<String>
而不是编写 List<String> list = new ArrayList<>();
,并将其替换为 var
,从而允许 Java 推断 推断 type list
是 - 它能够做到这一点,因为变量在定义时被初始化。请注意,您必须在初始化时推断 list
的类型(在上述情况下,您将 String
添加到 new ArrayList<String>();
)。因此,Java 仍然保留其静态类型声明。
与Kotlin有什么区别?
Kotlin 中用 var
定义的变量的类型也是推断的(但在 var foo: Int
的情况下也可以是显式的),并且 Kotlin 也是一种静态类型语言。
它们的含义非常不同,即使基本情况 var x = ...
中的语法最终是相同的:
var
在 Kotlin 中表示 "this is a mutable variable",并且可以在推断类型和显式类型时使用:var x: String = ...
;
var
in Java 表示 "this is a variable with inferred type",可用于可变变量和 final
变量。
var
in Java只能用于局部变量; var
在 Kotlin 中也用于属性。
var
in Java 10 可以简化一些声明,例如 ArrayList<String>
和流的类型。
var
只能用在Java10的方法中。但是你可以在Kotlin的任何地方写
并且Java10中没有val
关键字那么我们可以使用final var
作为Java10中的val
.
(我想我们默认都知道可变和不可变,所以我不会描述它们。)
var
在 Intellij IDEA 2018.1+ 中被视为 type
(JB Lexer) 和 keyword
(JB Grammar Psi)。
我开发了一个插件 Java 10 var type hints to show its type (just looks like Kotlin)
我知道我们可以在 Kotlin 中使用“var”关键字来定义变量:
var foo = 3
最新的java更新(java10)也引入了“var”类型:
var bar = new int[]{1, 2, 3}; // int[] bar = {1, 2, 3}
我的问题是,这些语言在使用“var”时有什么区别?
根据Java 10的release notes,它指出:
We seek to improve the developer experience by reducing the ceremony associated with writing Java code, while maintaining Java's commitment to static type safety, by allowing developers to elide the often-unnecessary manifest declaration of local variable types. This feature would allow, for example, declarations such as:
var list = new ArrayList<String>(); // infers ArrayList<String>
var stream = list.stream(); // infers Stream<String>
所以基本上是为了适应程序员的懒惰;您现在可以省略 List<String>
而不是编写 List<String> list = new ArrayList<>();
,并将其替换为 var
,从而允许 Java 推断 推断 type list
是 - 它能够做到这一点,因为变量在定义时被初始化。请注意,您必须在初始化时推断 list
的类型(在上述情况下,您将 String
添加到 new ArrayList<String>();
)。因此,Java 仍然保留其静态类型声明。
与Kotlin有什么区别?
Kotlin 中用 var
定义的变量的类型也是推断的(但在 var foo: Int
的情况下也可以是显式的),并且 Kotlin 也是一种静态类型语言。
它们的含义非常不同,即使基本情况
var x = ...
中的语法最终是相同的:var
在 Kotlin 中表示 "this is a mutable variable",并且可以在推断类型和显式类型时使用:var x: String = ...
;var
in Java 表示 "this is a variable with inferred type",可用于可变变量和final
变量。
var
in Java只能用于局部变量;var
在 Kotlin 中也用于属性。
var
in Java 10 可以简化一些声明,例如ArrayList<String>
和流的类型。var
只能用在Java10的方法中。但是你可以在Kotlin的任何地方写并且Java10中没有
val
关键字那么我们可以使用final var
作为Java10中的val
.
(我想我们默认都知道可变和不可变,所以我不会描述它们。)
var
在 Intellij IDEA 2018.1+ 中被视为 type
(JB Lexer) 和 keyword
(JB Grammar Psi)。
我开发了一个插件 Java 10 var type hints to show its type (just looks like Kotlin)