java 10和kotlin中的“var”

时间:2018-03-29 02:58:26

标签: java kotlin var java-10

我知道我们可以使用“var”关键字在Kotlin中定义变量:

var foo = 3

最新的java更新(java 10)也引入了“var”类型:

var bar = new int[]{1, 2, 3}; // int[] bar = {1, 2, 3}

我的问题是,这些语言之间使用“var”的区别是什么?

3 个答案:

答案 0 :(得分:28)

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

      Kotlin中的
    1. var x: String = ...表示“这是一个可变变量”,并且可以在推断类型和显式时使用var;

    2. Java中的
    3. final表示“这是一个带推断类型的变量”,可用于变量和var变量。

  2. Java中的
  3. var只能用于局部变量; Kotlin中的public static String getServerNameAndContextPath(HttpServletRequest req) { return "https://" + req.getServerName() + req.getContextPath(); } 也用于属性。

答案 1 :(得分:13)

根据Java 10的release notes,它声明:

  

我们通过减少仪式来寻求改善开发者体验   与编写Java代码相关联,同时保持Java的承诺   通过允许开发人员来避免静态类型安全   经常不必要的局部变量类型的清单声明。这个   例如,feature允许声明如下:

     

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也是静态类型语言。

答案 2 :(得分:5)

    Java 10中的
  • var可以简化某些声明,例如ArrayList<String>和流的类型。

  • var只能用于Java 10的方法。但是你可以在Kotlin的任何地方写它

  • Java 10中没有val关键字,因此我们可以在Java 10中将final var用作val

(我认为默认情况下我们都知道可变和不可变因此我不会描述它们。)

在Intellij IDEA 2018.1 +中,

var被视为type(JB Lexer)和keyword(JB Grammar Psi)。

我已经开发了一个Java 10 var类型提示插件来显示它的类型(看起来像Kotlin)