java - 如何在 Java 中的 "similar"3D vector 类之间进行转换?

标签 java type-conversion

我正在编写一个 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 类,比如 Vec3DVec3D 类具有与我相同的字段(float xfloat yfloat 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/

相关文章:

c++ - 为什么编译器在赋值时调用模板化的复制构造函数?

c++ - 在转换构造函数上启用_if(静态转换,is_base_of)

java - 对同一个 Socket 使用多个 OutputStream 是否安全?

java - 在 Redis 中存储大型复杂 Java 类对象的最佳方式?

java - 使用 Mockito 模拟静态方法

compiler-errors - 类型转换不能有聚合操作数(modelsim中的错误)

linux - 修复 AttributeError : 'file' object has no attribute 'buffer' (Python3)

c++ - 将字符串元素转换为整数 (C++11)

java - 为什么 Netty/Redisson DNS 解析器在主机名中添加括号?

java - Java中的单例和继承