gpt4 book ai didi

java:关于泛型结构的谜题

转载 作者:行者123 更新时间:2023-12-01 04:27:58 25 4
gpt4 key购买 nike

我对结构的创建有一个困惑:表示一般物理变换的接口(interface) 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 子类现在有和以前一样的问题。另外,根据这个定义,我的项目中到处都有泛型!

我的概念错了?我怎样才能构建一个我想要的这样的结构?

最佳答案

我想我会采用您的第一个解决方案,但如果您无法从 PoincareTransform.transform(Transform t) 中的给定变换获取矩阵,则会返回错误。

例如:

public class PoincareTransform implements Transform {
private Matrix matrix;
public Transform compose(Transform t) {
if (!t.hasMatrix()) {
// Throw an exception, or some other meaningful error.
}
...
}
}

这样,它是通用的,因此如果您最终得到了不同类型的矩阵变换,那么您可以使用它。

另一方面,如果您确实只想对 PoincareTransforms 进行操作,则可以使用 instanceof 运算符检查传入的实例是否正确。

public class PoincareTransform implements Transform {
private Matrix matrix;
public Transform compose(Transform t) {
if (!t instanceof PoincarTransform) {
// Throw an exception, or some other meaningful error.
}
PoincarTransform p = (PoincarTransform)t;
...
}
}

关于java:关于泛型结构的谜题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18321295/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com