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


猜你喜欢
- 一>实现功能在实验二中我们已经实现了在类微信界面添加recyclview并添加相应的imageview,本次实验就是在recyclvi
- 所需引入Jar包:jms-1.1.jaractivemq-all-5.15.0.jar生产者package com.mousewheel.d
- 1.在C#中,类名首字母需大写。如:class Student2.在C#中Main()方法有四种形式:static void Main(st
- Session具有以下特点: (1)Session中的数据保存在服务器端; (2)Session中可以保存任意类型的数据; (2)Sessi
- 1.<constant name="struts.i18n.encoding" value="UTF-8
- 背景介绍你刚从学校毕业后,到新公司实习,试用期又被毕业,然后你又不得不出来面试,好在面试的时候碰到个美女面试官!面试官: 小伙子,
- spring Boot源码编译1. git上下拉最新版的spring Boot下载:git clone git@github.com:spr
- 在本文中,我们将看到几个关于如何在Java 8中对List进行排序的示例。1.按字母顺序排序字符串列表List<String>
- 最近一个项目中,因为服务端是用的java开发的,客户端是用的C#,由于通信部分采用到了3DES加密,所以做个记录,以备以后需要的时候直接用。
- 前言在之前的文章中介绍过线程池的核心原理,在一次面试中面试官让手写线程池,这块知识忘记的差不多了,因此本篇文章做一个回顾。希望能够加深自己的
- bean作用域bean的作用域,其实就是设置创建 bean 的实例是属于单实例,还是多实例。1. 默认单实例默认情况下,创建的 bean 是
- 很多app中在第一次安装登陆时会有引导欢迎界面,第二次打开时就不再显示引导页面。这个功能可以通过使用SharePreferences将用户的
- 前言项目中时不时遇到查字典表等数据,只需要返回数据,不需要写其他业务,每个字典表可能都需要写一个接口给前端调用,比较麻烦,所以采用下面这种方
- 查找应用进程PID杀死应用进程PID运行启动脚本烦不烦啊,像我这么懒得人 得想个办法一步搞定!如下所示 新建一个shell脚本,然后将其运行
- 前言我们在项目的开发中,难免会遇到各种可预知的、不可预知的异常需要处理。每个过程都单独处理异常,系统的代码耦合度高,工作量大且不好统一,维护
- 一、只读自动属性(Read-only auto-properties) C# 6之前我们构建只读自动属性: public stri
- 本文实例讲述了Android TextView实现带链接文字事件监听的三种常用方式。分享给大家供大家参考,具体如下:/** * TextVi
- 1、创建Windows服务 说明:a)Description 服务描述,直接显示到Windows服务列表中的描述;b)Displa
- 本文实例为大家分享了Java Web实现简易图书管理系统的具体代码,供大家参考,具体内容如下前言首先实现的是用户的登录注册,注册成功后自动跳
- 本章概要返回JSON数据静态资源访问返回JSON数据默认实现JSON 是目前主流的前后端数据传输方式,Spring MVC中使用消息转换器H