Java 10 的 var 仅用于已初始化的局部变量声明,不可用于字段、参数等;需右侧提供完整类型信息,是编译期特性,不影响运行时性能与类型安全。

Java 10 引入了 var 关键字,用于局部变量类型推断,让编译器根据初始化表达式自动推导变量类型,从而减少冗余的类型声明,提升代码简洁性和可读性。
哪些地方能用 var
var 只适用于**局部变量声明且必须初始化**的场景。它不能用于字段、方法参数、返回值、catch 参数或 lambda 表达式中。
- ✅ 正确:在方法体内声明并立即赋值的变量,如
var list = new ArrayList<String>(); - ❌ 错误:未初始化(
var x;)、声明后赋值(var y; y = 10;)、类字段(private var name = "abc";) - ❌ 错误:泛型擦除导致类型不明确时,如
var map = new HashMap();(编译失败,缺少类型信息)
如何正确写出带 var 的泛型代码
使用 var 时,右侧初始化表达式必须提供足够类型信息,否则编译器无法推断。推荐显式指定泛型类型,或使用类型兼容的构造方式。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 推荐写法:
var list = new ArrayList<String>();→ 推断为ArrayList<String> - 也可用工厂方法:
var set = Set.of("a", "b");→ 推断为Set<String> - 避免裸 new:
var map = new HashMap();→ 编译错误;应写成var map = new HashMap<String, Integer>();
var 不影响运行时和类型安全
var 是纯编译期特性,生成的字节码与显式类型声明完全一致,不会降低性能,也不改变类型检查规则。
立即学习“Java免费学习笔记(深入)”;
- 推断后的类型是确定且不可变的,例如
var n = 42;→ 实际是int n = 42;,后续不能赋值double - IDE 和编译器仍会进行完整类型检查,比如
var s = "hello"; s = 123;会报错 - 调试时,IDE 通常能清晰显示推断出的实际类型,不影响开发体验
什么时候该用,什么时候该避免
适度使用 var 可提升可读性,但过度或不当使用反而降低清晰度。
- 适合:类型名冗长(如嵌套泛型)、重复出现(
Map<String, List<Future<Boolean>>>)、流式操作中间变量 - 谨慎:基础类型(
var i = 5;不如int i = 5;直观)、返回类型不明确的方法调用(var result = service.doSomething();)、意图需要强调类型时 - 团队建议:统一约定使用边界,例如只在类型名长度 ≥ 20 字符或泛型嵌套 ≥ 2 层时启用
var

















