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 次 |
最近记录: |