Cal*_*leb 23 java var kotlin java-10
我知道我们可以使用"var"关键字在Kotlin中定义变量:
var foo = 3
Run Code Online (Sandbox Code Playgroud)
最新的java更新(java 10)也引入了"var"类型:
var bar = new int[]{1, 2, 3}; // int[] bar = {1, 2, 3}
Run Code Online (Sandbox Code Playgroud)
我的问题是,这些语言之间使用"var"的区别是什么?
Ale*_*nov 28
它们的含义非常不同,即使基本情况中的语法var x = ...最终相同:
var在科特林的意思是"这是一个可变变量",并且可以使用这两种类型时是推断和当它是明确的:var x: String = ...;
var在Java中意味着"这是一个具有推断类型的变量",并且可以用于可变和final变量.
var在Java中只能用于局部变量; var在Kotlin也用于属性.
eli*_*eli 13
根据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有什么区别?
var还定义了Kotlin中定义的变量的类型(但也可以是明确的var foo: Int),而Kotlin也是静态类型的语言.
var在Java 10中可以简化一些声明ArrayList<String>和stream的类型.
var 只能在Java 10的方法中使用.但是你可以在Kotlin的任何地方编写它
而且也没有val在Java中10关键字,然后我们可以使用final var作为一个val在Java中10.
(我认为默认情况下我们都知道可变和不可变,所以我不会描述它们.)
var在Intellij IDEA 2018.1+中被视为type(JB Lexer)和keyword(JB Grammar Psi).
我已经为Java 10 var类型提示开发了一个插件来显示它的类型(看起来像Kotlin)

| 归档时间: |
|
| 查看次数: |
2430 次 |
| 最近记录: |