作者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
1F:→ jej:怎不对OnSomethingHappenedListener包装?? 03/12 12:07
2F:→ Killercat:因为我们可能会用很多个listener, 然後其中一个回传 03/12 12:36
3F:→ Killercat:错误的话就要停止掉其他的动作 ._./ 03/12 12:38
4F:推 snowlike:试着不采AnonymousClass写写看去设想isCorrect适合摆哪里 03/12 16:51
5F:→ jej:在做listener之前把所有的listener丢到observer里面... 03/13 12:27
6F:→ jej:有出错了.. observer来关?? 03/13 12:29
7F:→ Killercat:有些3rd listener不是observerable... 不过这倒是可以改 03/13 13:33
8F:→ Killercat:3rd party lib listener 不过这是可行方向 感恩 03/13 13:34
9F:→ Killercat:就怕後面的嫌observer pattern麻烦而已 =P 03/13 13:36