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

标签 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)会运行 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/

相关文章:

java - 是否可以编辑抽象类? java

java - Mockito stub 无效方法

java - 为什么 Java 不优化 |= 赋值?

scala - 是否可以创建可用作 T[A, B] 的泛型类型 T[A < : C[U], B < : C[U], U]?

java - Java中带有全局变量的抽象类没有设置?

python - Django:测试抽象模型

java - Spark 中的文本文件流

java - JPA/eclipse-link 2.6.0/mysql : incorrect generated table name

java - 泛型作为方法返回类型

java - 在 java 方法中使用泛型时如何正确转换?