如何在Java中正确使用方法结果

时间:2014-01-17 20:11:52

标签: java coding-style

我将在某些计算中使用方法调用的结果。我有两种方式:

  1. 调用方法一次并将返回值存储到本地值,然后在某些计算中使用本地值。

  2. 多次使用调用方法。

  3. 请参阅我的示例代码:

    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次的情况下应该使用哪种方式吗?

5 个答案:

答案 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...

它不会遵循凝聚力的原则,因为你通常不会期望狗叫这种方法......