作者Killercat (殺人貓™)
看板java
標題[問題] 關於final以及Anonymous Class的問題
時間Sat Mar 12 11:35:29 2011
其實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