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
    }

}
目录
相关文章
|
14天前
|
Go
初识go变量,使用var和:=来声明变量,声明变量的三种方式
这篇文章介绍了Go语言中使用`var`和`:=`声明变量的三种不同方式,包括声明单个或多个变量、通过值确定数据类型以及在函数体内使用`:=`声明局部变量。
初识go变量,使用var和:=来声明变量,声明变量的三种方式
|
5月前
|
Java
java全局变量和局部变量
java全局变量和局部变量
|
5月前
|
Java 编译器 开发者
JDK 10中的局部变量类型推断:探索var关键字的新境界
在JDK 10中,Java语言引入了一个令人兴奋的新特性:局部变量类型推断。通过使用关键字"var",开发者可以在声明局部变量时省略类型注解。这一改进旨在简化代码,提高可读性,并使Java更接近于动态类型脚本语言。本文将深入探讨局部变量类型推断的工作原理、优点、限制以及在实际项目中的应用。
|
PHP
【PHP】foreach 引用赋值
php foreach 引用赋值,在使用过程中需要及时释放引用变量,防止出现使用时变量污染。
153 1
|
Dart
Dart之变量(var)、常量(const)
Dart之变量(var)、常量(const)
74 0
Dart之变量(var)、常量(const)
java5-全局变量和局部变量
java5-全局变量和局部变量
72 0
java5-全局变量和局部变量
|
开发框架 Oracle Java
JDK和JRE的区别?main方法的注意点?强制和自动类型转换?
JDK和JRE的区别?main方法的注意点?强制和自动类型转换?
136 0
JDK和JRE的区别?main方法的注意点?强制和自动类型转换?
常量、变量、作用域、定义域、赋值(java)
常量、变量、作用域、定义域、赋值(java)
常量、变量、作用域、定义域、赋值(java)
|
Java
Java - 为什么 Java 中全局变量不一定初始化,局部变量必须初始化?
Java - 为什么 Java 中全局变量不一定初始化,局部变量必须初始化?
217 0
|
存储 Java
Java - JVM 那些事之“全局变量 & 局部变量”
Java - JVM 那些事之“全局变量 & 局部变量”
280 0