Java 11 新特性:var 局部变量类型推断
友情提示 : 推荐使用谷歌浏览器来阅读本专栏,其他浏览器可能存在兼容性问题。
Java 11 中引入了 var
关键字,它可以简化局部变量的定义。本小节中,我们就来通过相关代码示例,来学习一下这个新特性。
1. 使用限制
var
关键字并不能被随意使用,需满足下面两点:
- 必须定义在局部,也就是方法内;
- 必须是能够被推导出来的类型;
2. 使用示例
2.1 基本使用
通过下面这段代码示例,来看下它的基本使用方式:
public static void main(String[] args) {
// 主动声明类型
String str1 = "犬小哈教程";
// var 类型推导
var str2 = "犬小哈教程";
var num = 1;
System.out.println(str1);
System.out.println(str2);
System.out.println(num);
}
在
main()
方法中,我们比较了显示的类型定义与var
类型推导。使用var
关键字后,编译器会在编译阶段,根据对应的值,推导出对应的类型,效果与显示的类型定义效果相同。
控制台输出如下:
2.2 对象推导
另外,对于自定义的对象,同样能够使用 var
关键字。首先,我们定义一个 Person
对象:
public class Person {
// 姓名
private String name;
// 年龄
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
看下面的使用示例,同样是适用的:
public static void main(String[] args) {
// 自定义对象, 同样适用
Person person1 = new Person("犬小哈", 18);
var person2 = new Person("犬小哈", 18);
System.out.println(person1);
System.out.println(person2);
}
控制台输出如下:
打开编译后的 class
文件,可以看到,编译器已经帮助我们自动推导出了具体的类型:
2.3 非法使用
当 var
关键字被使用在方法外部,或者无法够推导它的具体类型时,无法被使用。参考下面的代码示例:
public class Main {
// 不允许非局部使用
var str = "犬小哈教程";
var person = new Person();
public static void main(String[] args) {
// 无法推导出具体类型
var test = null;
var test2;
}
}
值为
null
,或者未定义具体的值时,编译器无法推导对应的类型。
在 IDEA 中,上面这段代码,也是爆红状态,如下图所示: