gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 07:35:49 24 4
gpt4 key购买 nike

看看这个类

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com