Я не могу использовать метод цепочки нескольких классов векторов, которые строятся друг на друге. Я хочу расширить этот класс.Метод цепочки + наследование 2 или более раз
Здесь 2d один:
public class Vec2 < C extends Vec2 > {
public double x, y;
public Vec2() {
}
public Vec2(double x, double y) {
this.x = x;
this.y = y;
}
public C add(double x, double y) {
this.x += x;
this.y += y;
return (C) this;
}
}
Это для вектора с г элемента.
class Vec3 < C extends Vec3 > extends Vec2<Vec3> {
double z;
public Vec3(){}
public Vec3(double x, double y, double z) {
super(x, y);
this.z = z;
}
public C add(double x, double y, double z) {
super.add(x, y);
this.z += z;
return (C) this;
}
}
Но когда это использовать Vec3 то, как только я использую метод из vec2 два раза подряд, то он возвращает vec2.
Vec3<Vec3> a = new Vec3<>();
// ------------------------------------------------->.add() in Vec2 cannot be aplied
a.add(10, 20).add(10, 20, 10).add(10, 20).add(10, 20).add(10, 10, 20);
Я не хочу, чтобы написать класс, как это:
class Vec3 extends Vec2<Vec3> {
// constructor etc. like before...
public Vec3 add(double x, double y, double z) {
super.add(x, y);
this.z += z;
return this;
}
}
Причина тогда, когда я делаю vec4, например, я должен переопределить каждый метод Vec3.
Есть ли способ (синтаксис) вокруг этой проблемы? Где бы ни было, что Он вернет правильный класс.
[Это] (HTTP://stackoverflow.com/questions/1069528/method-chaining-inheritance-don-t-play-well-together), но я не уверен, сколько уровней оно может опуститься. –
Я не думаю, что вы можете уйти далеко, и это _Where независимо от того, что Он продолжает возвращать правильный класс, практически невозможно без участия разработчиков. –