看看这堂课
abstract class LolCat<T> {
T execute() throws Err, Arr {
T lol = doSomething();
if (lol == null)
lol = doSomething();
return lol;
}
abstract T doSomething();
abstract T doSomething() throws Err, Arr;
}
现在我们在某处的任何方法中都有一个匿名实现,像这样的 LolCat
final UhmLetsSayCat cat = new ImplLolCat<UhmLetsSayCat>() {
@Override
UhmLetsSayCat doSomething() {
return null; // somehow a UhmLetsSayCat is returned for real sometimes null
}
@Override
UhmLetsSayCat doSomething() throws Err,Arr {
return null; // really it does right thing, whatever
}
}.execute();
现在我的问题是,为什么对 doSomething() 的第一次调用会转到不抛出 Err、Arr 的方法,但第二次调用(如果 lol 为空)会运行抛出 Err、Arr 的 doSomething 实现。如何区分要运行的方法!?
编辑:假警报。我的天啊。我一定是整个晚上都瞎了,doSomething实际上不是同一个方法名称,它们分别称为queryAll和QuerryAl1,我会找到这样做的人并打他。
EDIT2:谢谢大家。