Java类型推断让编译器自动推断变量或表达式类型,提升代码简洁性与安全性。1. 局部变量用var(Java 10+),如var list = new ArrayList(); 编译器推断为ArrayList。2. var仅用于局部变量,不适用于字段、参数或返回类型。3. 泛型方法调用时自动推断类型,如pick("hello", "world")推断T为String。4. Lambda表达式中根据函数式接口上下文推断参数与返回类型,如Consumer c = s -> System.out.println(s); 中s被推断为String。5. 钻石操作符(Java 7+)使new HashMap()能根据左边声明推断泛型类型。6. 类型推断保持静态类型安全,减少冗余,但应避免滥用var影响可读性。

Java类型推断是指编译器在某些情况下自动推断出表达式或变量的类型,而不需要程序员显式写出类型。这种机制让代码更简洁,同时保持类型安全。
局部变量类型推断(var)
从 Java 10 开始,引入了 var 关键字用于局部变量的类型推断。
例如:var list = new ArrayList
编译器会根据右边的表达式 new ArrayList
立即学习“Java免费学习笔记(深入)”;
注意:var 只能用于局部变量,不能用于字段、方法参数或返回类型。
泛型方法中的类型推断
Java 编译器可以在调用泛型方法时自动推断类型参数,无需显式指定。
例如:public static
String result = pick("hello", "world");
这里编译器会推断出 T 是 String,因为传入的两个参数都是字符串。
你也可以省略尖括号中的类型,直接写 pick("hi", "bye"),编译器会自动搞定。
Lambda 表达式和函数式接口中的推断
在使用 Lambda 时,Java 能根据上下文推断参数类型和返回类型。
例如:Runnable r = () -> System.out.println("run");
Consumer
这里的 s 没有声明为 String,但编译器知道它是 String,因为 Consumer
钻石操作符(Diamond Operator)
从 Java 7 开始,可以用 让编译器推断泛型类型。
例如:Map
右边不需要重复写泛型参数,编译器会根据左边的声明自动推断。
基本上就这些。类型推断不是让 Java 变成动态语言,而是减少冗余代码,让开发更高效,同时依然保证编译时类型检查。理解它有助于写出更干净的代码,但也要注意别滥用 var 导致可读性下降。











