jdk10的var局部变量类型推理

简介: 本文介绍了JDK 10中引入的局部变量类型推断功能,即`var`关键字,它允许开发者在声明具有初始值的局部变量时省略显式类型,以简化代码并提高可读性。

注:本人参考了openjdk官网,由于openjdk是开源的,所以不存在侵权行为,本章只为学习,我觉得没有什么比官网更具有话语权
1、jdk10的var的类型推测:就是这种处理将仅限于具有初始值设定项的局部变量、增强型 -循环中的索引以及在传统 -循环中声明的局部变量;它不适用于方法形式、构造函数形式、方法返回类型、字段、捕获形式或任何其他类型的变量声明。允许在声明隐式类型 lambda 表达式的形式参数时使用var ,通过在枚举(泛型枚举)中允许类型变量,并对枚举常量执行更清晰的类型检查,增强 Java 语言中构造的表达能力enum

2、jdk10提出这个方案的原因:也是因为开发人员认为本地方法里面的类型声明通常被认为是不必要的,并且几乎所有其他流行的静态类型“大括号”语言,无论是在JVM上还是在JVM上,都已经支持某种形式的局部变量类型推断:C++(auto),C#(var),Scala(var/val),Go(声明)。Java 几乎是唯一一种没有接受局部变量类型推断的流行静态类型语言;在这一点上,这应该不再是一个有争议的功能

3、我举几个反例吧:
3.1、比如说这个静态变量,就会报错

package com.example.jdk10;

public class LocalVariable {
    public static void main(String[] args) {

    }
    var a=90;
}

img

3.2、方法返回类型也不能用var

img

4、在举个简单的正面例子(抛开那些简单的方法里面的局部推测)
隐式的lambada(至于lambada表达式里面的变量都是final类型,这种基础知识就不提了)

package com.example.jdk10;

import java.util.Arrays;
import java.util.List;

public class LocalVariable {
    public static void main(String[] args) {
        List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
        names.forEach((var name) -> System.out.println("Hello, " + name));
    }

}

4.1运行结果:

img

4.2 在枚举(泛型枚举)中使用类型变量

package com.example.jdk10;

public enum Foo {
    APPLE("red"), BANANA("yellow"), ORANGE("orange");

    private String color;

    Foo(String color) {
        this.color = color;
    }

    public String getColor() {
        return color;
    }
}

package com.example.jdk10;

public class LocalVariable {
    public static void main(String[] args) {
        var apple = Foo.APPLE;
        System.out.println(apple.getColor()); // 返回 "red"

        var banana = Foo.BANANA;
        System.out.println(banana.getColor()); // 返回 1
    }

}
目录
相关文章
|
1月前
|
安全 Java 编译器
JDK 10中的局部变量类型推断:Java编程的简化与革新
JDK 10引入的局部变量类型推断通过`var`关键字简化了代码编写,提高了可读性。编译器根据初始化表达式自动推断变量类型,减少了冗长的类型声明。虽然带来了诸多优点,但也有一些限制,如只能用于局部变量声明,并需立即初始化。这一特性使Java更接近动态类型语言,增强了灵活性和易用性。
110 53
|
4月前
|
Java 编译器 API
JDK8到JDK18版本升级的新特性问题之在JDK10中,实现局部变量类型推断,如何操作
JDK8到JDK18版本升级的新特性问题之在JDK10中,实现局部变量类型推断,如何操作
|
4月前
|
安全 Java 编译器
JDK版本特性问题之想在 JDK 10 中,使用var 关键字,如何实现
JDK版本特性问题之想在 JDK 10 中,使用var 关键字,如何实现
|
6月前
|
存储 Java 关系型数据库
数据类型的取值范围以及Java和Mysql数据库的类型对照--强调时间类型的转换(jdk1.8)
数据类型的取值范围以及Java和Mysql数据库的类型对照--强调时间类型的转换(jdk1.8)
51 0
|
6月前
|
Java
JavaSE——JDK8新特性(2/2):方法引用(静态方法的引用、实例方法的引用、特定类型的方法引用、构造器引用)
JavaSE——JDK8新特性(2/2):方法引用(静态方法的引用、实例方法的引用、特定类型的方法引用、构造器引用)
41 0
|
7月前
|
Java 编译器 开发者
JDK 10中的局部变量类型推断:探索var关键字的新境界
在JDK 10中,Java语言引入了一个令人兴奋的新特性:局部变量类型推断。通过使用关键字"var",开发者可以在声明局部变量时省略类型注解。这一改进旨在简化代码,提高可读性,并使Java更接近于动态类型脚本语言。本文将深入探讨局部变量类型推断的工作原理、优点、限制以及在实际项目中的应用。
|
7月前
|
存储 算法 Java
JDK8-JDK17中的新特性(var类型推断、模式匹配、Record、密封类)(二)
JDK8-JDK17中的新特性(var类型推断、模式匹配、Record、密封类)(二)
|
3月前
|
Java
安装JDK18没有JRE环境的解决办法
安装JDK18没有JRE环境的解决办法
381 3
|
2天前
|
NoSQL 关系型数据库 MySQL
Linux安装jdk、mysql、redis
Linux安装jdk、mysql、redis
52 7
|
4月前
|
Java 关系型数据库 MySQL
"解锁Java Web传奇之旅:从JDK1.8到Tomcat,再到MariaDB,一场跨越数据库的冒险安装盛宴,挑战你的技术极限!"
【8月更文挑战第19天】在Linux上搭建Java Web应用环境,需安装JDK 1.8、Tomcat及MariaDB。本指南详述了使用apt-get安装OpenJDK 1.8的方法,并验证其版本。接着下载与解压Tomcat至`/usr/local/`目录,并启动服务。最后,通过apt-get安装MariaDB,设置基本安全配置。完成这些步骤后,即可验证各组件的状态,为部署Java Web应用打下基础。
65 1