我有一个抽象类,它有一个字段,其类型可以在其子类之间变化。例如:
public abstract class ABCModel {
protected String foo;
protected String bar;
protected ? baz;
}
Run Code Online (Sandbox Code Playgroud)
在我的实现中,baz可能是 Int 或 Float。例如:
public class ModelFoo {
protected Int baz;
}
public class Modelbar {
protected Float baz;
}
Run Code Online (Sandbox Code Playgroud)
首先,让我问一下这是否是 Java 中有效/可接受的设计模式?我选择这种模式是因为我想抽象掉共享方法中大部分乏味的样板文件。
根据我的实现方式,我得到了这个错误的变化:
incompatible types: CAP#1 cannot be converted to BidAsk
where CAP#1 is a fresh type-variable:
CAP#1 extends Object from capture of ?
Run Code Online (Sandbox Code Playgroud)
这让我相信我做错了什么。
与我的实际代码相比,我发布的示例有点微不足道,其中这个泛型隐藏在嵌套的哈希表中。在投入太多之前,我试图确定我正在做的是否是 Java 中的智能设计。
我试过搜索这个,但可能没有正确表达术语。
谢谢。
您要问的是泛型的基本用法:
public abstract class ABCModel<T> {
private T baz;
public T getBaz() { return baz; }
public void setBaz(T baz) { this.baz = baz; }
}
public class IntModel extends ABCModel<Integer> { // baz is of type Integer
}
public class FloatModel extends ABCModel<Float> { // baz is of type Float
}
IntModel m1 = new IntModel();
Integer i = m1.getBaz();
FloatModel m2 = new FloatModel();
Float f = m2.getBaz();
Run Code Online (Sandbox Code Playgroud)