Есть несколько вариантов, и ни один из них не так хорош, как то, что вы показываете.Во-первых, конечно, вы можете написать явный конструктор:
Vector3d(Vec3d v) {this.x = v.x; this.y = v.y; this.z = v.z; }
Во-вторых, вы можете предоставить конструктор, который работает для любого векторного типа, который реализует интерфейс, который вы определили (назовите его «V»:)
Vector3d(V v) {this.x = v.getX(); this.y = v.getY(); this.z = v.getZ(); }
Конечно, вероятность того, что любая случайная вектороподобная вещь будет реализовывать V, в значительной степени равна 0, если вы не являетесь каким-либо органом стандартизации.
Вы также можете предоставитьконструктор, который принимает double[]
, при условии, что большинство таких типов будут обеспечивать метод toArray()
:
Vector3d(double[] v) {this.x = v[0]; this.y = v[1]; this.z = v[2]; }
Это позволит относительно легко преобразовать большинство других векторных классов в ваш, бездобавление пользовательского конструктора.