我将在某些计算中使用方法调用的结果。我有两种方式:
调用方法一次并将返回值存储到本地值,然后在某些计算中使用本地值。
多次使用调用方法。
请参阅我的示例代码:
public class TestMethod {
public void doSomething_way1() {
String prop1 = this.getProp1();
if (prop1 != null) {
String value = prop1 + " - another value";
System.out.println(value);
}
}
public void doSomething_way2() {
if (this.getProp1() != null) {
String value = this.getProp1() + " - another value";
System.out.println(value);
}
}
public String getProp1() {
return "return the same value";
}
}
注意,方法doSomething将一次调用一次(在Web环境中)
有人可以告诉我在方法结果至少使用3次的情况下应该使用哪种方式吗?
答案 0 :(得分:0)
我相信多次使用方法调用更直观,使代码更具可读性。
答案 1 :(得分:0)
在你的情况下,即使你多次拨打getProp1()
方法也没关系。因为它不执行任何可能导致性能问题的计算,对象创建或I / O操作。
答案 2 :(得分:0)
你可以更进一步:
public void doSomething_way2() {
if (this.getProp1() != null) {
System.out.println(this.getProp1() + " - another value");
}
}
如果方法被大量调用(我的意思是很多次,每秒很多次),创建额外的变量可能会在垃圾收集方面稍微改变性能,而不是......我认为它是微不足道的。
答案 3 :(得分:0)
在某些情况下,如果值不是final
,则多次获取值可能会引发线程安全问题,而如果获取值一次,则至少会{{1}的整个操作}将与prop1的单个值一致。
但即使线程不是问题,我仍然认为在风格上更好地“将值”缓存在一个名称很好的局部变量中。
(我假设您的真实代码比返回固定字符串“某事”更重要) - way1
方法编写的非常安全。 :)
答案 4 :(得分:0)
从绩效的角度来看,至少从给出的例子来看,似乎并没有任何根本的区别。少量迭代的对象分配(除非它们是重量级对象)应该是最小的。
然而,从编程设计和实现的角度来看,保持程序“凝聚力”可能会有所帮助,即让类更接近地代表事物。
在这种情况下,方法返回的局部变量(因为它是一个不同的'东西')和随后的计算。
e.g:
interface Dog{
void wagTail();
Dung eat(DogFood f);
}
interface Human{
void pickUpDung(Dung d);
}
codeLoop(Human m, Dog d, DogFood f){
d.wagTail();
Dung poo = d.eat(f);
m.pickUpDung(poo);
}
而不太具有凝聚力的例子是
interface Dog{
void wagTail();
void eatAndHaveHumanPickUp(DogFood f);
}
// you can fill in the rest...
它不会遵循凝聚力的原则,因为你通常不会期望狗叫这种方法......