在单个函数调用中调用两个函数

时间:2012-03-27 09:58:57

标签: java

我不确定它是否像我写的一样直接,但我有一个用例,其中必须同时完成两个函数调用。

示例:

class ABC {
    int a;
    String b;

    setA(int x) {
        //..
    }

    setB(int y) {
        // ...
    }
}

所以我想要的是,当我致电setA()时,setB()也应该被隐含地调用, 即我不想写:

setA(int x) {
    // ..
    setB(x);
}

有没有办法做到这一点?我想添加一些像监听器这样的东西,以便在调用setA()时,我的监听器会调用setB()。这是一个选择吗?

4 个答案:

答案 0 :(得分:1)

你的setA()调用的目标总是后跟一个setB()调用而不显式调用这个看起来很傻。你有实际的理由不写:

public void setA(int x) {
   ...
  setB(x);
}

答案 1 :(得分:1)

你应该考虑所有那些聪明而有用的答案。

如果这些没有帮助,你可能会寻找某种AOP solution - 这就是你想要的想法:“如果有人调用firstMethod(),拦截那个调用,做任何其他的东西,然后也许调用想要的方法,然后做一堆其他的东西。“例如,保持日志记录层与逻辑层完全分离是很好的 - 逻辑层甚至不会知道它被拦截和记录。

BUT!相信我,设置它的问题通常是值得它,它并不完全符合OOP标准。但是,如果您的问题 比您发布的代码段更复杂,并且您真的可以使用此功能,那么AspectJSpring AOP就可以了。

答案 2 :(得分:0)

嗯...

setAandB(int x)
{
  seta(x);
  setb(x);
}

确切地说它......

答案 3 :(得分:0)

您在评论中说,用户可以调用setA(x);,这也应该导致调用setB(x);,这样如果用户未明确调用setB(x);,它仍会两个变量都有一个值。

在这种情况下,为什么不实现你的getter方法getB();,以便查看是否已设置,如果没有,则相应地设置它...

public String getB(){
  if (b == null){
    // hasn't been set by the user, so lets set it to the value of 'a'
    setB(a);
    }
  return b;
  }

现在,如果用户只调用setA(x);,当他们尝试拨打getB(x);时,会在返回之前设置b的值。