Я создаю классы математики (Java), и мне нужны векторы из двух, трех и четырех измерений (для обработки 3D-графики). Я решил сделать один абстрактный вектор суперкласса, который реализует все распространенное поведение, такое как масштабирование, сложение, вычитание и точечные продукты.принудительно применять параметр того же типа, что и подкласс
Мой вопрос: есть ли способ выразить (с принудительным выполнением при компиляции, а не во время выполнения), что второй вектор, на котором выполняется точечный продукт, должен быть того же типа, что и подкласс, точечный продукт существует (так как они должны иметь одинаковый размер)? (И есть более эффективный способ реализации векторов?) Мой код выглядит следующим образом:
public abstract class Vector {
protected float[] coordinates;
protected Vector(float[] coordinates, int length) {
this.coordinates = Arrays.copyOf(coordinates, length);
}
public float int dotproduct(/* Type? */ vector) {
// do something
}
}
class Vector2 extends Vector {
// stuff
}
class Vector3 extends Vector {
// stuff, including outer product
}
Вы используете подклассы для представления векторов разных размеров? Это звучит не так, как быть с этим. – jsheeran
Ну, есть некоторые специфические для измерения черты, как внешний продукт, правильно? Это также помогает обеспечить равенство измерений во время компиляции. С другой стороны, я понял, что это выглядит немного странно и, следовательно, вопрос в круглых скобках. –