看看这个课程
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,则运行抛出Err,Arr的doSomething实现。如何区分运行哪些方法!?
编辑:错误报警。我的天啊。我一定是整个晚上一直都是瞎子,做某事实际上是不一样的方法名称,他们叫做querryAll和QuerryAl1,我会找到那个做过它并揍他的人。
EDIT2:谢谢大家。
答案 0 :(得分:6)
您不能在类中声明具有相同签名的两个方法。 throws
子句,注释和返回类型不计算在内。
abstract T doSomething();
abstract T doSomething() throws Err, Arr; // won't compile
如果编译,则编译器中存在错误。
答案 1 :(得分:1)
您甚至无法编译此示例(错误:重复方法doSomething()
)