【发布时间】:2020-04-19 08:28:06
【问题描述】:
我在编写代码时主要遵循的一件事是,如果我看到某个对象属性或方法在同一个方法中被多次访问,我倾向于将它分配给一个变量并在任何地方重复使用它。
List<ItemA> itemAList = alpha.doX(..., ..., ...)
.peek(item -> packagedItems.put(item.getName(), ...))
.peek(item -> readyItems.put(item.getName(), ..., ...)))
.map(item -> transform(item.getName(), ...))
.collect(toList());
正如我们所见,item.getName() 已被多次使用。我通常会将它移动到一个变量中并重新使用它:
String itemName = item.getName();
List<ItemA> itemAList = alpha.doX(..., ..., ...)
.peek(item -> packagedItems.put(itemName, ...))
.peek(item -> readyItems.put(itemName, ..., ...)))
.map(item -> transform(itemName, ...))
.collect(toList());
我有时也会在代码审查中提出相同的建议。但是,我想现在是否有任何性能成本必须从对象实例中取消引用而不是直接能够从变量访问?
围绕这种做法有哪些想法?在什么情况下(如果有的话)一个会比另一个更受欢迎?
谢谢。
【问题讨论】:
-
您发布的两个代码 sn-p 具有不同的语义。事实上,第二个版本甚至不应该编译,说明变量
item已经被定义。即使要编译item -> ...(item.getName)...也是一个 lambda 函数,因此不等同于item -> ...(itemName)...。
标签: java code-formatting code-readability