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

时间:2012-09-05 15:12:43

标签: 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;
}

现在我们在某些方法中有一个匿名实现,像这样的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:谢谢大家。

2 个答案:

答案 0 :(得分:6)

您不能在类中声明具有相同签名的两个方法。 throws子句,注释和返回类型不计算在内。

abstract T doSomething();
abstract T doSomething() throws Err, Arr; // won't compile

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

答案 1 :(得分:1)

您甚至无法编译此示例(错误:重复方法doSomething()