鉴于以下两个类Foo
和FooBar
:
public abstract class Foo {
private String type;
private int id;
public String getType() {...}
public int getId() {...}
}
public class FooBar extends Foo {
private String extraField;
public String getExtraField() {...}
}
如何使用可能为Foo
或FooBar
的字段实现类?例如,在下面的类Example
中,我希望getFoo()
方法返回Foo
的实例或FooBar
的实例,以便所有访问者都可用:< / p>
public class Example {
private Foo fooField;
// Not correct!
public Foo getFooField() {...}
}
我在想我需要将泛型类实现为包装器,但我不确定如何将它绑定到Example
类。
public interface FooWrapper<T extends Foo> {
// Would I define some getter here?
// Is this the right track?
}
更新:为了澄清,Example
不扩展Foo
。 Example
是一种完全不同的类型,其中包含Foo
/ FooBar
类型的字段。
答案 0 :(得分:2)
您可以将Example
类设为通用:
class Example<T extends Foo> {
private T fooField;
public T getFooField() { return fooField;}
}
然后为Foo
或FooBar
创建参数化实例:
Example<Foo> fooExample = new Example<Foo>();
Foo foo = fooExample.getFooField();
System.out.println(foo.getId());
System.out.println(foo.getType());
Example<FooBar> fooBarExample = new Example<FooBar>();
FooBar fooBar = fooBarExample.getFooField();
System.out.println(fooBar.getId());
System.out.println(fooBar.getType());
System.out.println(fooBar.getExtraField());