具有泛型参数的 Java 抽象方法

标签 java generics abstract extends

我有以下情况:有一个抽象类(abs)和两个从abs扩展的类(con1 con2)

现在我希望abs有一个带有参数的抽象函数,其中参数的类型必须是类本身的类型。

我在 abs 类中尝试了以下操作:

public abstract void foo(abs i);

以及 con1con2 中的以下内容:

public abstract void foo(con1 i);
public abstract void foo(con1 i);

但这没有用。解决此类问题的一般方法是什么?

最佳答案

不,基本上没有实现该方法。根据您获得的声明,我应该能够编写:

abs x = new con1();
abs y = new con2();
x.foo(y);

听起来像你想要的:

public abstract class Abstract<T extends Abstract<T>>
{
    public abstract void foo(T t);
}

然后:

public final class Concrete1 extends Abstract<Concrete1>
{
    @Override public void foo(Concrete1 x) { ... }
}

请注意,这并没有完全强制执行它,因为您仍然可以编写:

public final class Evil extends Abstract<Concrete1>

...但至少当每个人都“按规则行事”时它才有效。

关于具有泛型参数的 Java 抽象方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29143435/

相关文章:

java - 在JAVA中显示JTable中所有反序列化的对象

java - 回收 recyclerview 时应用程序的布局被破坏

java - 循环我的列表,以便遍历并组合整个列表

参数化集合中的Java继承疑问

python - 为什么Python允许抽象方法有代码?

java - 在子类中重用条件语句。

java - java的线程安全映射

generics - 用于Rust中多个泛型转换的GADT

java - 在 java 属性声明中强制使用泛型类型

java - 克隆一个实例化的抽象类