我正在尝试使用类型擦除来访问通用类型的继承方法。
我有一个父类 Space 和子类 Scalar、Vector、Mapping 等。我想要一个接口 Function,我可以为它指定 Space 的各种子类之间的域和范围。
Mapping 类包含接口 Function,并且应该能够通过方法 Of 访问它。
如果程序员想取一个双精度的映射,即
Mapping map = new Mapping(...);
Scalar answer = map(0.0);
然后我希望函数 Of 将双精度转换为标量,然后将其传递给接口函数。
public class Mapping<Domain extends Space, Range extends Space> extends Space{
protected Function<Domain,Range> function;
public Range of(Double point){
return function.of(new Scalar(point)); //Error, the type <Domain,Range> is not applicable to type Scalar.
}
}
public interface Function<Domain extends Space,Range extends Space>{
public Range of(Domain point);
}
public class Scalar extends Space {
protected double value=0.0;
public Scalar(double in){
value = in;
}
Eclipse 建议将 Scalar 转换为 Domain,但由于 Domain 扩展了 Space,Scalar 也是如此,所以 Scalar 不应该被接受传递给 Function 吗?
编辑:
我有每个子类的构造函数,它们将 Scalar 作为参数,例如Public Vector(Scalar x){...}
. 我想Mapping
接受一个双精度数,将其转换为 a Scalar
,然后如果Domain
函数的 是,例如,一个向量,那么我想Vector(Scalar x)
调用构造函数。
理想情况下,我只会有一个双精度的父构造函数:
public Range of(Double point){
return function.of(new Domain(point));
}
但我无法实现泛型类型。这是我试图解决的问题。有没有更好的方法来做到这一点?