gpt4 book ai didi

java - 覆盖原始类型的泛型方法

转载 作者:行者123 更新时间:2023-11-30 10:08:58 25 4
gpt4 key购买 nike

我有泛型类和泛型方法

class Foo<T> {
public <E> E execute() {
return null;
}
}

谁能给我解释一下这是为什么:

class Bar extends Foo {
public <E> E execute() {
return null;
}
}

产生错误

execute() in Bar clashes with execute() in Foo; both methods have the same erasure, yet neither overrides the other

没关系

class Bar extends Foo<Object> {
public <E> E execute() {
return null;
}
}

最佳答案

在第一个示例中,您使用了 Foo 的原始类型,因此 Foo 的方法签名是 public Object execute()。这与 Bar 中的通用版本冲突。这实际上很容易在没有继承的情况下重现:

class Foo
{
public <E> E execute() { return null; }
public Object execute() { return null; }
}

在第二个示例中,您没有使用 Foo 的原始类型,因此 execute 方法的签名完全匹配。在这种情况下,它只是一个简单的方法覆盖。因此,您可能应该对其进行注释。

class Bar extends Foo<Object> {
@Override
public <E> E execute() {
return null;
}
}

关于java - 覆盖原始类型的泛型方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53520823/

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