JDK10中的局部变量类型推断var

网友投稿 405 2022-11-19


JDK10中的局部变量类型推断var

java是一种强类型, 许多流行的编程语言都已经支持局部变量类型推断,如js,python,C++等

JDK10 可以使用var作为局部变量类型推断标识符

Local-Variable Type Inference(局部变量量类型推断),顾名思义只能用做为局部变量

注意

仅适用于局部变量量,如 增强for循环的索引,传统for循环局部变量不能使用于方法形参、构造函数形参、方法返回类型或任何其他类型的变量量声明标识符var不是关键字,而是一个保留类型名称,而且不支持类或接口叫var,也不符合命名规范

用jshell试验或者IDEA

//根据推断为 字符串串类型

var strVar = "springboot";

System.out.println(strVar instanceof String);

//根据10L 推断long 类型

var longVar = 10 L;

//根据 true推断 boomUKOlnualean 类型

var flag = true;

//var flag = Boolean.valueOf("true");

//System.out.println(flag instanceof Boolean);

// 推断 ArrayList

var listVar = new ArrayList < String > ();

System.out.println(listVar instanceof ArrayList);

// 推断 Stream

var streamVar = Stream.of("aa", "bb", "cc");

System.out.println(streamVar instanceof Stream);

if (flag) {

System.out.println("这个是 flag 变量量,值为true");

}

for (var i = 0; i < 10; i++) {

System.out.println(i);

}

try (var input = new FileInputStream("validation.txt")) {}

附录:下面看下局部变量类型推断

很多人抱怨Java是一种强类型,需要引入大量的样板代码。甚至在这些情况下,给定好变量名,通常很清楚发生了什么,明显类型声明往往被认为是不必要的。许多流行的编程语言都已经支持某种形式的局部变量类型推断:如C++ (auto), C# (var), Scala (var/val), Go (declaration with :=)等。

JDK10 可以使用var作为局部变量类型推断标识符,此符号仅适用于局部变量,增强for循环的索引,以及传统for循环的本地变量;它不能使用于方法形式参数,构造函数形式参数,方法返回类型,字段,catch形式参数或任何其他类型的变量声明。

标识符var不是关键字;相反,它是一个保留的类型名称。这意味着var用作mUKOlnua变量,方法名或则包名称的代码不会受到影响;但var不能作为类或则接口的名字(但这样命名是比较罕见的,因为他违反了通常的命名约定,类和接口首字母应该大写)。

参考一下示例:

var str = "ABC"; //根据推断为 字符串类型

var l = 10L;//根据10L 推断long 类型

var flag = true;//根据 true推断 boolean 类型

var flag1 = 1;//这里会推断boolean类型。0表示false 非0表示true

var list = new ArrayList(); // 推断 ArrayList

var stream = list.stream(); // 推断 Stream

反编译class文件:

String str = "ABC";

long l = 10L;

boolean flag = true;

int flag1 = true;

ArrayList list = new ArrayList();

Stream stream = list.stream();

从上面示例可以看出,当我们是用复杂的方法时,不需要特意去指定他的具体类型返回,可以使用var推断出正确的数据类型,这在编码中,可以大幅减少我们对方法返回值的探究。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:RestTemplate发送get和post请求,下载文件的实例
下一篇:Java遍历起止日期中间的所有日期操作
相关文章

 发表评论

暂时没有评论,来抢沙发吧~