看看这个类
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 为 null)会运行 doSomething 实现,并抛出 Err,Arr。运行哪些方法之间是如何区分的!?
编辑:误报。我的天啊。我整个晚上一定是瞎了眼,doSomething实际上不是相同的方法名称,它们被称为queerryAll和QuerryAl1,我要找到做这件事的人并打他。
EDIT2:谢谢大家。
最佳答案
一个类中不能声明两个具有相同签名的方法。 throws
子句、注释和返回类型不计算在内。
abstract T doSomething();
abstract T doSomething() throws Err, Arr; // won't compile
如果可以编译,则说明您的编译器中存在错误。
关于Java:抽象泛型类和方法重载顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12284547/