Java:抽象泛型类和方法重载顺序

rap*_*ura 0 java generics abstract-class overloading

看看这堂课

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;
}
Run Code Online (Sandbox Code Playgroud)

现在我们在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();
Run Code Online (Sandbox Code Playgroud)

现在我的问题是,为什么第一次调用doSomething()会转到不抛出Err,Arr但第二次调用的方法,如果lol为null,则运行抛出Err,Arr的doSomething实现.如何区分运行哪些方法!?

编辑:错误报警.我的天啊.我一定是整个晚上一直都是瞎​​子,做某事实际上是不一样的方法名称,他们叫做querryAll和QuerryAl1,我会找到那个做过它并揍他的人.

EDIT2:谢谢大家.

Pet*_*rey 6

您不能在类中声明具有相同签名的两个方法.该throws条款,注释和返回类型不计.

abstract T doSomething();
abstract T doSomething() throws Err, Arr; // won't compile
Run Code Online (Sandbox Code Playgroud)

如果编译,则编译器中存在错误.