このクラスを見て
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 をスローしないメソッドに行くのに、loll が null の場合、2 番目の呼び出しが Err、Arr をスローする doSomething 実装を実行するのはなぜですか。どのメソッドを実行するかは、どのように区別されるのでしょうか!?
編集:誤警報。ああ、神様。私は一晩中盲目だったに違いありません.doSomethingは実際には同じメソッド名ではありません.queryAllとQuerryAl1と呼ばれていました.私はそれをした男を見つけて彼を叩きます.
EDIT2:みんなありがとう。