Java 10局部变量类型推断(JEP-286)中var的禁用场景汇总请求
嘿,我来帮你把Java 10中var(局部变量类型推断)不能使用的所有场景都梳理清楚,这些都是实际开发中容易碰到的限制:
Java 10
var 禁用场景汇总 类/接口的成员变量(实例或静态):
var只能用于局部变量,不能作为类的字段或者静态变量。class Test { var instanceVar = 10; // ❌ 编译错误:var不能用于实例变量 static var staticVar = "hello"; // ❌ 编译错误:var不能用于静态变量 }方法的参数:方法的形参不能用
var来声明,必须显式指定类型。public void process(var input) { // ❌ 编译错误:var不能用于方法参数 // ... }方法的返回类型:不能用
var作为方法的返回类型,必须明确返回类型。public var getResult() { // ❌ 编译错误:var不能用于方法返回类型 return "test"; }未初始化的局部变量:
var声明的变量必须在声明时立即初始化,编译器需要通过初始化值推断类型。public void test() { var x; // ❌ 编译错误:var变量必须初始化 x = 5; }初始化值为
null的情况:null没有具体的类型信息,编译器无法推断var的实际类型。var obj = null; // ❌ 编译错误:无法推断var的类型,null没有具体类型匿名内部类的声明:
var不能用来推断匿名内部类的类型,因为匿名内部类是唯一的子类,编译器无法确定其具体类型。var runnable = new Runnable() { // ❌ 编译错误:var不能用于匿名内部类 @Override public void run() { // ... } };catch块的异常参数:catch块需要明确指定异常类型,不能用
var替代。try { // ... } catch(var e) { // ❌ 编译错误:catch参数不能用var // ... }Lambda表达式的参数:Lambda参数要么显式声明类型,要么完全省略类型,不能用
var来修饰。var func = (var x) -> x * 2; // ❌ 编译错误:Lambda参数不能用var // 正确写法:要么 (int x) -> x*2,要么 (x) -> x*2泛型的类型参数:
var不能作为泛型类或接口的类型参数,只能用于声明泛型实例时的变量。ArrayList<var> list = new ArrayList<>(); // ❌ 编译错误:var不能作为泛型参数 // 正确写法:var list = new ArrayList<String>(); 或者 var list = new ArrayList<>();数组的直接初始化(无new关键字):如果不使用
new关键字初始化数组,编译器无法推断数组的具体类型。var arr = {1, 2, 3}; // ❌ 编译错误:无法推断数组类型 // 正确写法:var arr = new int[]{1,2,3};
内容的提问来源于stack exchange,提问作者Niraj Sonawane
相关产品推荐
相关产品推荐

