Java 具有返回正确类型的getter的泛型类型字段?
给定以下两类Java 具有返回正确类型的getter的泛型类型字段?,java,Java,给定以下两类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
:
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() {...}
}
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());
如何实现一个字段可以是Foo
或FooBar
的类?例如,在下面的类example
中,我希望getFoo()
方法返回Foo
的实例或FooBar
的实例,以便所有访问器都可用:
public class Example {
private Foo fooField;
// Not correct!
public Foo getFooField() {...}
}
我认为我需要实现一个泛型类作为包装器,但我不确定如何将它绑定到示例
类中
public interface FooWrapper<T extends Foo> {
// Would I define some getter here?
// Is this the right track?
}
公共接口包装器{
//我可以在这里定义一些getter吗?
//这是正确的轨道吗?
}
更新:为了澄清,
示例
没有扩展Foo
Example
是一种完全不同的类型,它包含一个类型为Foo
/FooBar
的字段。您可以将Example
类设置为泛型,如下所示:
class Example<T extends Foo> {
private T fooField;
public T getFooField() { return fooField;}
}
FooWrapper
应该是一个装饰师吗?@SotiriosDelimanolis我想是的。我对泛型非常模糊,所以这只是一个潜在解决方案的想法。好吧,这清楚地回答了我的问题。我只希望它能解决我的问题:-/