JDK10-var类型推断

var声明的可读性建议

1、使用 var 声明时,可以对齐左侧变量的名称,去除冗余的信息,使得代码变的清爽。

// with explicit types
No no = new No();
AmountIncrease<BigDecimal> more = new BigDecimalAmountIncrease();
HorizontalConnection<LinePosition, LinePosition> jumping =
    new HorizontalLinePositionConnection();
Variable variable = new Constant(5);
List<String> names = List.of("Max", "Maria");
 
// with inferred types
var no = new No();
var more = new BigDecimalAmountIncrease();
var jumping = new HorizontalLinePositionConnection();
var variable = new Constant(5);
var names = List.of("Max", "Maria");

当我们需要使代码更清晰,更简洁的同时不会丢失掉一些重要信息,那就使用var。

2、考虑构造函数的场景,将两次的类型声明节省到一次,避免重复和样板代码

Map<User, List<String>> userChannels = new HashMap<>();
 
var userChannels = new HashMap<User, List<String>>();

3、显式类型不一定可读性就高。在有的时候,冗杂的显式类型声明会妨碍可读性。

但也要注意,如果右侧代码没有办法清晰的说明变量类型 或者 依赖了具体的类型(如特定对象) 时,最好还是使用显式类型。

InternationalCustomerOrderProcessor<AnonymousCustomer, SimpleOrder<Book>> orderProcessor = createInternationalOrderProcessor(customer, order);

它就像王大娘的裹脚一般,又臭又长,一个很简单的功能要写到吐血,中间还夹叙夹议才能保证语义明确,避免后期维护的时候看不懂写的什么。

var的使用原则

不要为了读写代码方便而进行优化,而应该优化可维护性。如果奔着可维护性去优化代码,随着程序的不断迭代,自然会在可读性和代码量上能找到平衡点。

关于var和可读性间的权衡,终极建议是:使用好变量名!由于var省略了变量的类型,读代码的人只能去猜测代码的真实意图,因此作为开发人员更有义务要为局部变量取一个好的名字。理论上来说这也是Java开发人员应该做的。不过在实践中,其实Java代码的很多可读性问题并不是语言特性引起的,更多还是目前大家的做法导致的,比如说变量命名。

编译器原理

编译器在处理 var 变量的时候,会去检测右侧代码的声明,并将其类型用于左侧,这一过程发生在初始化阶段。

JIT在编译成字节码的时候使用的是推断后的结果类型,在class文件中只会保存具体的类型声明。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值