我正在编写一个 geom 包作为 Java 库的一部分,它有自己的 vector 类:
package mypackage.geom;
public class Vector3D {
public float x;
public float y;
public float z;
public Vector3D(float x, float y, float z) {
this.x = x;
this.y = y;
this.z = z;
}
...
}
我的库有望补充第三方库的功能,第三方库也实现了 vector 类,比如 Vec3D
。 Vec3D
类具有与我相同的字段(float x
、float y
和 float z
)和构造函数签名Vector3D
类。我只想在我的库中需要 Vector3D
参数的任何地方使用第三方 vector 类(例如,假设我有一个 Camera
类,它有一个 setPosition( Vector3D vector3D)
方法,我希望能够将 Vec3D
实例传递给它)。
这在 C++ 中是可能的。例如,可以通过以下方式声明从任何类到 Vector3D 的通用显式转换器构造函数:
template <class C>
explicit Vector3D(const C& c) : x(c[0]), y(c[1]), z(c[2]) {}
它所需要的只是外国人类实现operator[]
。我想知道如何在 Java 中实现类似的东西,如果可能的话。
最佳答案
有几个选项,没有一个像您显示的那样好。首先,当然可以写一个显式的构造器:
Vector3d(Vec3d v) {this.x = v.x; this.y = v.y; this.z = v.z; }
其次,您可以提供一个适用于实现您定义的接口(interface)(称之为“V”:)的任何 vector 类型的构造函数
Vector3d(V v) {this.x = v.getX(); this.y = v.getY(); this.z = v.getZ(); }
当然,任何类似 vector 的随机事物实现 V 的可能性几乎为 0,除非您是某种标准机构。
您还可以提供一个采用double[]
的构造函数,假设大多数此类类型将提供toArray()
类方法:
Vector3d(double[] v) {this.x = v[0]; this.y = v[1]; this.z = v[2]; }
这将使将大多数其他 vector 类转换为您的 vector 类变得相对容易,而无需添加自定义构造函数。
关于java - 如何在 Java 中的 "similar"3D vector 类之间进行转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7302814/