最近有一个问题是,在Java中将调用getter的结果分配给局部变量以避免多次调用同一个访问器是一个好主意.我找不到原来的帖子,但一致认为这通常不是必要的,因为Hotspot无论如何都会优化方法调用开销.
但是,采用这种技术避免多次演员的观点是什么?目前我面临以下选择:
if (a instanceof Foo) {
// Cast once and assign to local variable.
Foo foo = (Foo)a;
if (foo.getB() == 1 && foo.getC() == 2) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
要么
if (a instanceof Foo) {
// Cast twice making code compact but possibly less readable.
// Also, is there an overhead in multiple casts?
if (((Foo)a).getB() == 1 && ((Foo)a).getC() == 2) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
Ste*_*veD 19
由于可读性问题,我更喜欢创建局部变量而不是总是进行转换.代码可读性对我(或其他使用相同代码的开发人员)来说是一个重要问题.
在这个阶段担心性能让我感到震惊,因为它是"过早优化"模式的一个例子.
Jon*_*eet 12
绝对是第一个.性能差异可能无关紧要,但可读性肯定会提高.
除了删除强制转换之外,它还意味着您可以使用不同的名称 - 毕竟,您现在已经了解了有关此变量的更多信息,因此为其提供更具体的名称可能更有意义.情况并非总是如此,但也可能如此."为了命名一个值而引入局部变量"重构技术是一个被低估的,即使没有演员...