“var” in java 10 and kotlin
我知道我们可以使用"var"关键字在Kotlin中定义变量:
最新的java更新(java 10)也引入了"var"类型:
1
| var bar = new int[]{1, 2, 3}; // int[] bar = {1, 2, 3} |
我的问题是,这些语言之间使用"var"的区别是什么?
它们的含义非常不同,即使基本情况var x = ...中的语法最终相同:
Kotlin中的var表示"这是一个可变变量",并且可以在推断类型和显式时使用:var x: String = ...;
Java中的var表示"这是一个带有推断类型的变量",可以用于mutable和final变量。
Java中的var只能用于局部变量; Kotlin中的var也用于属性。
-
奖金问题:Java中的var与c#中的相同吗?这篇旧文章表明Java中没有相应的内容,但现在答案可能已经过时了。
-
最佳答案已过时,但有一些相关的答案。
-
顺便说一下,在这种情况下,有没有一种标准方法可以将答案标记为过时?你有代表在这里,我猜你知道。或者,如果合适,你可以做到。
-
@ user1306322没有办法做到这一点,除了downvote和/或评论,然后upvote或发布最新的答案。
-
@BartoszKP通常我会提出赏金并选择"当前答案已过时",但这仅适用于当时没有答案是当代的,而事实并非如此。我见过人们编辑"这个答案是真的,直到DATE"在顶部。
-
@ user1306322也许我浏览得太快,但我只看到声称var计划用于Java 10,而不是它存在。所以"目前的答案已经过时"对我来说似乎很好。
-
我决定给它一个赏金:p
-
Java中的var更接近C#中的含义,而不是Kotlin或Scala。
-
Java 10中的var几乎与C ++ 11中的auto相同。有了很多从C / C ++借来的概念和关键词,java也可以自动化。 var很容易误导某人使用Swift或Kotlin背景。
-
@SeshadriR 1.有人考虑过,请参阅sv.surveymonkey.com/results/SM-FLWGS5PW上的问题4和5。 2.实际上,我无法想到在初始Java定义之后从C ++借用的单一特性(当然,这并不意味着没有一个)。我不认为泛型是一个反例,它们与模板的工作方式完全不同。
根据Java 10的发行说明,它指出:
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(); // infers ArrayList
var stream = list.stream(); // infers Stream
所以基本上,它是为了适应程序员的懒惰;而不是写List list = new ArrayList<>();,你现在可以省略List,并用var替换它,从而允许Java推断出哪个类型list - 它能够做到这一点,因为变量在定义时被初始化。注意,在初始化时你必须推断出list的类型(在上面的例子中,你要将String添加到new ArrayList();)。因此,Java仍然保留其静态类型声明。
与Kotlin有什么区别?
还推断出用var定义的Kotlin中的变量类型(但在var foo: Int的情况下也可以是显式的),并且Kotlin也是静态类型语言。
-
"据说没有。"由谁提出?意思完全不同。"用var定义的Kotlin变量的类型也被推断为"不,可以推断或不推断。
-
在问题的上下文中,其中var foo = 3,它是推断的。我没有说它不明确。我猜,我已经删除了"据说",选择不好的词。
-
+1懒惰!一些程序员倾向于停止思考,而是在任何地方使用新功能,相信他们肯定会有所帮助。他们使用var而不是int,相信他们更快......
-
@Droidum是的,但似乎Oracle的Java语言架构师Brian Goetz不同意,并认为根据自己的喜好重新调整我的答案是合适的。
-
哇我认为伪造别人帖子的内容是不合适的!他是谁做的?真的,整个世界都抱怨在社交媒体上影响人们甚至选举 - 这个论坛的每个人都可以根据自己的需要自由修改别人的意见吗?来吧! (对不起有很多编辑,我仍然不熟悉没有按回车的评论)
-
Java 10中的var可以简化一些声明,如ArrayList和流的类型。
-
var只能在Java 10的方法中使用。但是你可以在Kotlin的任何地方编写它
-
Java 10中没有val关键字,因此我们可以在Java 10中使用final var作为val。
(我认为默认情况下我们都知道可变和不可变,所以我不会描述它们。)
var在Intellij IDEA 2018.1+中被视为type(JB Lexer)和keyword(JB Grammar Psi)。
我已经为Java 10 var类型提示开发了一个插件来显示它的类型(看起来像Kotlin)
-
这不是我的问题的答案;您应该说明Java和Kotlin之间"var"的区别
-
是的,也许我没有说明差异......我稍后会改进这个答案。