2012-03-27 242 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