我对结构的创建有一个困惑:一个表示一般物理转换的接口 Transform 和一个表示特定类型转换的 PoincareTransform 类。我想做这样的事情
public interface Transform {
public Transform compose(Transform t);
}
public class PoincareTransform implements Transform {
private Matrix matrix;
public Transform compose(Transform t) {
...
}
}
但我希望该方法 compose(Transform T) 仅采用 PoicareTransform 因为必须有一个矩阵来组合。一个可能的解决方案是使用泛型
public interface Transform<T extends Transform<T>> {
public T compose(T t);
}
public class PoincareTransform implements Transform<PoincareTransform> {
private Matrix matrix;
public PoincareTransform compose(PoincareTransform t) {
...
}
}
但这并不令人满意,因为在概念上不干净、不优雅,而且又出现了一些麻烦:PoincareTransform 子类现在和以前一样有问题。此外,有了这个定义,我的项目周围都有泛型!
我在概念上是错误的?我怎么能建造这样一个我想到的结构?