我有一个(通用)类,其中包含其他类的元数据。元数据以多种方式使用(写入和读取 XML 数据、数据库、作为文本输出等)。到目前为止,这有效。但是在将所有这些用于从其他类继承的类时,我遇到了一个问题。
请查看以下代码(我尝试生成一个可编译的最小示例,但下面标记的行除外):
class A {
public Meta<? extends A> getMeta() {
return new Meta<A>();
}
public void output() {
/*
* Error shown in eclipse for the next line:
* The method output(capture#1-of ? extends A) in the type
* Outputter<capture#1-of ? extends A> is not applicable for the arguments
* (A)
*/
getMeta().getOutputter().output(this);
}
}
class B extends A {
@Override
public Meta<? extends B> getMeta() {
return new Meta<B>();
}
}
class Meta<CLS> {
public Outputter<CLS> getOutputter() {
return null;
}
}
class Outputter<CLS> {
public void output(CLS obj) {
}
}
我可以更改A.getMeta()
为返回Meta<A>
以使上面的行编译,但是我不能像Meta<B> getMeta()
在 B 类中那样覆盖它。
关于如何解决这个问题的任何想法?