看板 java 關於我們 聯絡資訊
其實Anonymous Class裡面吃外部變數只能吃final這點滿困擾我的 例如說 final boolean isCorrect = true; something(new OnSomethingHappenedListener(){ void onErrorHappened(Exception e) { isCorrect = false; //這樣當然不行 }}); if(isCorrect == false) //do some error handling 所以我只好自己寫了一組wrapper避開這種情形 public class ObjectWrapper<T> { @SuppressWarnings("unchecked") T mTargetObject = (T) new Object(); public ObjectWrapper(T value) { mTargetObject = value; } public T getValue() { return mTargetObject; } public void setValue(T value) { mTargetObject = value; } } 使用起來大概長這樣 final ObjectWrapper<Boolean> isCorrect = new ObjectWrapper<Boolean>(true); something(new OnSomethingHappenedListener(){ void onErrorHappened(Exception e) { isCorrect.setValue(false); }}); if(isCorrect.getValue() == false) //do some error handling 不過我相信java應該有原生的方法(或者像我剛剛做的generic class)有支援 這種需求?請問大家有類似的訊息嗎 :) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.43.127.154
jej:怎不對OnSomethingHappenedListener包裝?? 03/12 12:07
Killercat:因為我們可能會用很多個listener, 然後其中一個回傳 03/12 12:36
Killercat:錯誤的話就要停止掉其他的動作 ._./ 03/12 12:38
snowlike:試著不採AnonymousClass寫寫看去設想isCorrect適合擺哪裡 03/12 16:51
jej:在做listener之前把所有的listener丟到observer裡面... 03/13 12:27
jej:有出錯了.. observer來關?? 03/13 12:29
Killercat:有些3rd listener不是observerable... 不過這倒是可以改 03/13 13:33
Killercat:3rd party lib listener 不過這是可行方向 感恩 03/13 13:34
Killercat:就怕後面的嫌observer pattern麻煩而已 =P 03/13 13:36