Java 10 var的使用及限制

在Java 10的众多特性里,局部变量的类型推断是比较受大家关注的特性之一。这里简单介绍下它的使用以及限制。

在Java 7,声明一个列表我们会这样做:

List<String> list = new ArrayList<String>();

Java 8/9可以改写为:

List<String> list = new ArrayList();

等式右边的类型会根据左边声明List所指定的类型推断出。

Java 10引入了var,声明列表:

var list = new ArrayList();

JDK会把列表的泛型类型推断为Object。

var声明的为局部变量,它允许开发人员跳过局部变量类型的声明,局部变量的类型会由JDK推断出。

var使用位置

1、在static初始化代码块里使用:

static {
        var name= "张三";
        System.out.println("Hello, " + name);
    }

2、方法体里的局部变量

public void sayHello() {
  var name = "李四";
  System.out.println("Hello, " + name);
}

3、for循环

var names = new ArrayList();
for(var name : names) {
  System.out.println(name);
}

4、接收方法的返回值

public Integer doSomething() {
  //...
}

var result = doSomething();

var并不是保留字,是允许“var”作为变量名使用。

var var = 10;

var禁止使用的地方

var并不是在所有地方都能够使用,这里列一下不能使用var的地方。

1、不能作为构造函数的参数

public class Demo {
  public Demo(var param) {
    //错误用法
  }
}

2、不能作为方法的参数

public void doSomething(var param1, var param2) {
  //错误用法
}

3、不能用作catch的参数

try {
  //...
} catch(var ex) {
  //错误用法
}

版权声明:著作权归作者所有。

相关推荐

Java 10:类型推断局部变量var

Java 10将新增特性:类型推断的局部变量声明var。java9以及之前的版本,声明一个局部变量需要显式声明它的类型。Java 10引入了新的变量声明关键词var,使用它不需要我们显式声明局部变量的类型,它会自动推断出局部变量的类型。Java 9示例:import java.util.*; public class Java9&nbs

Java重写hashCode()的原则及方法

Java重写hashCode()方法有几个原则:1、如果两个对象使用equals()方法比较,返回true(即相等),那么两个比较对象返回的hashCode()必须相等。System.out.println(objA.equals(objB)); System.out.printlin(objA.hashCode() == objB.hashCode()); 如果objA.eq

MySQL:datetime与timestamp的区别及使用选择

datetime与timestamp的区别1、存储空间不同在MySQL,timestamp在内部存储为整型,占用4个字节,而datetime占用8个字节。2、存储方式不同timestamp存储时,会从插入时间的客户端时区转换为UTC(世界标准时间)时间存储,而datetime不会做时间的转换直接存储。3、存储的时间范围不同timestamp:UTC时间,1970-01-01 00:00:

使用Angular CLI的6个最佳实践及专业技巧

我们在新建前端项目时,常常会为项目的代码结构以及技术选型(如gunt,gulp,webpack,systemjs等等)绞尽脑汁。Angular CLI为我们开发Angular应用提供了一个标准的项目模板。项目模板里包含了完整的测试:包括unit测试,e2e测试多环境构建,提供了develop和production这两种基本的构建还提供了一系列代码开发工具,如ng generat

Java 9:Observer和Observable废弃原因及解决方案

Observer和Observable在Java 9标记为废弃。废弃原因Observer和Observable有几个原因:1、不能序列化Observable没有实现Serializable接口,它的内部成员变量都是私有的,子类不能通过继承它来对Observable的成员变量处理。所以子类也不能序列化。参考:Why is java.util.Observable&nbs