2012-03-27 100 views
0

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

例子:

class ABC { 
    int a; 
    String b; 

    setA(int x) { 
     //.. 
    } 

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

所以,我想的是,当我打电话setA()setB()应该也隐含调用, 即我不想写:

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

有任何方式来做到这一点?我想添加一个像监听器的东西,这样当setA()被调用时,我的监听器将调用setB()。这是一个选项吗?

+0

为什么不添加一个'setAandB(...)'方法?如果那些东西总是被一起调用,那么为什么不移除单个调试者呢? – Thomas 2012-03-27 10:01:05

+0

@Thomas,snap ... – Nim 2012-03-27 10:02:56

+0

因为setb(x)也可以独立调用......用例就像setA(x)被调用时默认值赋给b基于x的值.. – Asha 2012-03-27 10:16:29

回答

0

嗯......

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

不正是它说...

1

你有组A()调用始终遵循一个组B()调用没有明确进行调用的目标似乎相当愚蠢。你有没有真正的理由不写:

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

你应该考虑所有这些聪明和有用的答案。

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

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

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