java 10和kotlin中的"var"

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

  1. 它们的含义非常不同,即使基本情况中的语法var x = ...最终相同:

    1. var在科特林的意思是"这是一个可变变量",并且可以使用这两种类型时是推断和当它是明确的:var x: String = ...;

    2. var在Java中意味着"这是一个具有推断类型的变量",并且可以用于可变和final变量.

  2. var在Java中只能用于局部变量; var在Kotlin也用于属性.

  • Java中的`var`更接近C#中的含义而不是Kotlin或Scala. (4认同)
  • 奖金问题:Java中的var与c#中的相同吗?[这篇旧帖子](/sf/ask/241070091/)表明Java中没有等价物,但也许答案现在已经过时了. (2认同)

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初始化时(在上述情况下,你会添加Stringnew ArrayList<String>();).因此,Java仍然保留其静态类型声明.

与Kotlin有什么区别?

var还定义了Kotlin中定义的变量的类型(但也可以是明确的var foo: Int),而Kotlin也是静态类型的语言.

  • +1懒惰!一些程序员倾向于停止思考,而是在任何地方使用新功能,相信他们肯定会有所帮助.他们使用var而不是int,相信他们更快...... (3认同)
  • 哇我认为伪造别人帖子的内容是不合适的!他是谁做的?真的,整个世界都抱怨在社交媒体上影响人们甚至选举 - 这个论坛的每个人都可以根据自己的需要自由修改别人的意见吗?来吧!(对不起有很多编辑,我仍然不熟悉没有按回车的评论) (2认同)

Sin*_*Sin 5

  • 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)