gpt4 book ai didi

Java泛型和继承

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:20:10 26 4
gpt4 key购买 nike

我有以下抽象类:

public abstract class AbSuperClass1<K,S> {
//class definition
}

和:

public abstract class AbSuperClass2<K,S> {
public abstract <Q extends AbSuperClass1<K,S>> void method(Q arg);
...
}

然后我有两个具体的实现

public class Concrete1 extends AbSuperClass<String, String>{
//class definition
}

和:

public class Concrete2 extends AbSuperClass2<String, String>{
public void method(Concrete1 arg){
//method definition
}
}

然而,这不会编译,因为 Concrete1 未被识别为 Concrete2 中方法参数的有效类型,但据我所知,Concrete1 是正确的类型,因为它扩展了 AbSuperClass1。

我哪里错了?

最佳答案

考虑这个程序:

public class OtherConcrete extends AbSuperClass<String, String> {}

AbSuperClass2<String, String> x = new Concrete2();
x.method(new OtherConcrete());

您希望它做什么?您已经覆盖了为 AbSuperClass<String, String>一个特定子类型 提供实现的方法。 - 但您还没有提供可以处理任何 的实现 AbSuperClass<String, String> ,这是必需的。

在不了解具体情况的情况下,很难提出特定的行动方案。 Bozho 关于添加另一个类型参数的建议 - 允许您制作 method更具体的声明 - 是一个很好的......但整个事情变得非常复杂。如果您能想出任何方法来减少正在发生的通用 funkiness 的数量,您的代码维护者可能会为此感谢您。

关于Java泛型和继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3095562/

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