Java var 之 局部变量类型推断

Java一直在努力减少语法的冗长性。首先是Diamond Operator ,现在var(局部变量类型– JEP 286)在Java中声明变量。var基本上,当您用于声明变量时,与其声明变量类型,不如从设置变量的类型中假定其类型。例如

应用程序
var str = "Hello world";
//or
String str = "Hello world";

在上面的示例中,在第一条语句中,您将a设置String为变量,str因此隐式假定该String类型为type。在上面的示例中,第一条语句基本上等同于第二条语句。

var 同时声明和初始化

使用时var,必须在同一位置初始化变量。您不能将声明和初始化放在不同的位置。如果未在适当位置初始化变量,则会出现编译错误– Cannot use 'var' on variable without initializer

应用程序
var i;  //Invalid Declaration - - Cannot use 'var' on variable without initializer
        
var j = 10; //Valid Declaration
System.out.println(i);

var 不是关键字

虽然样子,var不是保留Java的关键字。因此,您可以创建名称为“ var”的变量-允许使用。

应用程序
var var = 10;   //Valid Declaration
        
int var = 10;   //Also valid Declaration

var 用法

使用var仅限于–具有初始化程序的局部变量,增强的for循环中的索引以及在传统的for循环中声明的局部变量;它不适用于方法形式,构造函数形式,方法返回类型,字段,catch形式或任何其他类型的变量声明。

用法如下:

  • 带有初始化器的局部变量
  • 增强的for循环中的索引
  • 在传统的for循环中声明的本地人
应用程序
var blogName = "how2codex.com";
        
for ( var object : dataList){
    System.out.println( object );
}
for ( var i = 0 ; i < dataList.size(); i++ ){
    System.out.println( dataList.get(i) );
}

用法不允许,因为:

  • 方法参数
  • 构造函数参数
  • 方法返回类型
  • 类字段
  • 捕获形式(或任何其他类型的变量声明)
应用程序
public class Application {
    
    //var firstName;    //Not allowed as class fields
        
    //public Application(var param){    //Not allowed as parameter
 
    //}
    /*try{
        
    } catch(var ex){    //Not allowed as catch formal
    }*/
    /*public var demoMethod(){  //Not allowed in method return type
        return null;
    }*/
    /*public Integer demoMethod2( var input ){  //Not allowed in method parameters
        return null;
    }*/
}

var 不向后兼容

由于这是新的语言功能,因此使用编写的代码var不会在较低的JDK版本(小于10)中进行编译。因此,只有在确定时才使用此功能。

var 不影响性

saigon has written 1440 articles

One thought on “Java var 之 局部变量类型推断

Leave a Reply