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

时间:2015-03-19 11:30:13

标签: java generics abstract extends

我有以下情况:有抽象类(abs)和两个类,它们从abscon1con2)延伸

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

我在abs课程中尝试了以下内容:

public abstract void foo(abs i);

以及con1con2中的以下内容:

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

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

2 个答案:

答案 0 :(得分:2)

不,基本上没有实现该方法。有了你的声明,我能够写:

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>

......但至少每个人都在“遵守规则”时都会有效。

答案 1 :(得分:0)

方法定义在con1和con2上应该相同:

@override
public abstract void foo(abs i)
{ ...

这里的注释检查你真的覆盖了父母。谷歌“继承和多态”