var的到来
var的引入最先是在JDK 10 中进行添加的,在后面的JDK 11进行了改进。最终纳入了java的新特性里面,使用过其他语言的var,会发现var的强大或者随意,java里面var 会变成这样么?
局部变量类型推断
在一个局部定义中(即在方法内部),编译器可以自动发现类型。我们可以通过var进行启动它。
从定义上面我们可以发现var的使用域是局部的,是编译器能够进行推导的。
package com.hjh.test; import java.util.LinkedList; /** * @program: java17_learn * @description: * @author: maxlchuang * @create: 2024-02-21 11:45 */public class VarTest { static class Demo{ public void sayHello() { System.out.println("hello!!"); } } public static void main(String[] args) { var demo = new Demo(); demo.sayHello(); var num = 1; System.out.println(num); LinkedList<Integer> list = new LinkedList<>(); list.add(1); list.add(2); list.add(3); list.add(4); for (var integer : list) { System.out.println(integer); } } class NoVar{ String a = "field"; // var b = "Stop do it";
//
// void method() {
// var noInitializer ;
// var aNull = null;
// }
//
// var test(){
// return "使用在方法上也是不允许的";
// } } }
由上面的代码,我们也可以发现使用var的一些场景限制:
- 不能用在字段上面,即使能够推断出来
- 如果不做初始化操作或者直接提供null,编译器是推断不出来的
- 不能用在方法定义,即使能够像是推断出来
总结上来看,var的特性由于java兼容的问题,对于一些类型推断还是有一些限制的,对于一些类名又臭又长的确实是一种优化声明。
最佳实践
使用var进行对齐代码,使代码优雅,提高可读性
Demo demo = new Demo();
MalformedParameterizedTypeException exeception = new MalformedParameterizedTypeException(); //明显提高可读性
var demo = new Demo();
var exeception = new MalformedParameterizedTypeException();