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
    }

}
目录
相关文章
|
安全 Java 编译器
JDK 10中的局部变量类型推断:Java编程的简化与革新
JDK 10引入的局部变量类型推断通过`var`关键字简化了代码编写,提高了可读性。编译器根据初始化表达式自动推断变量类型,减少了冗长的类型声明。虽然带来了诸多优点,但也有一些限制,如只能用于局部变量声明,并需立即初始化。这一特性使Java更接近动态类型语言,增强了灵活性和易用性。
373 53
|
Java 编译器 API
JDK8到JDK18版本升级的新特性问题之在JDK10中,实现局部变量类型推断,如何操作
JDK8到JDK18版本升级的新特性问题之在JDK10中,实现局部变量类型推断,如何操作
236 0
|
安全 Java 编译器
JDK版本特性问题之想在 JDK 10 中,使用var 关键字,如何实现
JDK版本特性问题之想在 JDK 10 中,使用var 关键字,如何实现
|
存储 Java 关系型数据库
数据类型的取值范围以及Java和Mysql数据库的类型对照--强调时间类型的转换(jdk1.8)
数据类型的取值范围以及Java和Mysql数据库的类型对照--强调时间类型的转换(jdk1.8)
340 0
|
Java 编译器 开发者
JDK 10中的局部变量类型推断:探索var关键字的新境界
在JDK 10中,Java语言引入了一个令人兴奋的新特性:局部变量类型推断。通过使用关键字"var",开发者可以在声明局部变量时省略类型注解。这一改进旨在简化代码,提高可读性,并使Java更接近于动态类型脚本语言。本文将深入探讨局部变量类型推断的工作原理、优点、限制以及在实际项目中的应用。
|
Java
JavaSE——JDK8新特性(2/2):方法引用(静态方法的引用、实例方法的引用、特定类型的方法引用、构造器引用)
JavaSE——JDK8新特性(2/2):方法引用(静态方法的引用、实例方法的引用、特定类型的方法引用、构造器引用)
201 0
|
存储 算法 Java
JDK8-JDK17中的新特性(var类型推断、模式匹配、Record、密封类)(二)
JDK8-JDK17中的新特性(var类型推断、模式匹配、Record、密封类)(二)
|
12月前
|
存储 Ubuntu 安全
在Ubuntu 16.04上安装openjdk-6/7/8-jdk的步骤
在整个安装过程中,你可能需要管理员权限,因此你可能要使用 `sudo` 来获取必要的权限。记得做完每一个步骤后,都要检查输出,以确保没有发生错误,并且每项操作都成功完成。如果在安装过程中遇到问题,查看 `/var/log/` 下的日志文件对于问题的解决可能是有帮助的。
718 21
|
12月前
|
IDE Ubuntu Java
在Ubuntu18.04安装兼容JDK 8的Eclipse集成开发环境的指南。
完成以上步骤后,您将在Ubuntu 18.04系统上成功安装并配置了Eclipse IDE,它将与JDK 8兼容,可以开始进行Java开发工作。如果遇到任何问题,请确保每一步骤都正确执行,并检查是否所有路径都与您的具体情况相匹配。
518 11
|
Java 关系型数据库 MySQL
在Linux平台上进行JDK、Tomcat、MySQL的安装并部署后端项目
现在,你可以通过访问http://Your_IP:Tomcat_Port/Your_Project访问你的项目了。如果一切顺利,你将看到那绚烂的胜利之光照耀在你的项目之上!
605 41