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

作者:程序人生-vincent 时间:2022-06-16 20:32:48 

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推断 boolean 类型
var flag = true;
//var flag = Boolean.valueOf("true");
//System.out.println(flag instanceof Boolean);

// 推断 ArrayList<String>
var listVar = new ArrayList < String > ();
System.out.println(listVar instanceof ArrayList);

// 推断 Stream<String>
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用作变量,方法名或则包名称的代码不会受到影响;但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<String>(); // 推断 ArrayList<String>
var stream = list.stream();     // 推断 Stream<String>

反编译class文件:


String str = "ABC";
long l = 10L;
boolean flag = true;
int flag1 = true;
ArrayList<String> list = new ArrayList();
Stream<String> stream = list.stream();

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

来源:https://blog.csdn.net/vincent_wen0766/article/details/108861956

标签:JDK10,局部变量,var
0
投稿

猜你喜欢

  • SpringBoot深入了解日志的使用

    2023-01-06 15:40:34
  • 全面解析Hibernate关联操作、查询操作、高级特性、并发处理机制

    2021-06-25 08:48:48
  • IDEA搭建SpringBoot离线工程的方法

    2023-04-11 05:50:42
  • nacos使用占位符${}进行参数配置的方法

    2022-07-15 08:59:07
  • Java技能点之SimpleDateFormat进行日期格式化问题

    2023-09-09 01:50:26
  • Java深入了解数据结构中常见的排序算法

    2021-11-02 23:33:53
  • java多线程抓取铃声多多官网的铃声数据

    2023-12-18 23:20:05
  • java 使用DecimalFormat进行数字的格式化实例详解

    2022-04-28 10:55:25
  • Unity C#打包AssetBundle与场景详解

    2022-02-19 14:04:13
  • java实现一个简单的网络爬虫代码示例

    2021-08-05 13:59:12
  • Springboot动态切换数据源的具体实现与原理分析

    2022-11-24 13:45:26
  • SpringBoot和Vue.js实现的前后端分离的用户权限管理系统

    2023-09-03 14:37:33
  • Java实现在线SQL编程最新完整版

    2022-04-12 01:03:45
  • 流读取导致StringBuilder.toString()乱码的问题及解决

    2022-12-20 13:34:14
  • Java Collections集合继承结构图_动力节点Java学院整理

    2022-07-10 03:44:53
  • SpringBoot中获取profile的方法详解

    2023-11-19 18:05:00
  • C#实现简易点餐功能

    2021-10-20 22:14:31
  • Spring整合Quartz开发代码实例

    2022-03-12 16:37:26
  • C#中WPF颜色对话框控件的实现

    2023-04-13 06:09:41
  • Spring Boot 自动配置的实现

    2023-07-21 18:18:55
  • asp之家 软件编程 m.aspxhome.com