Расширенная идиома Java для 2+ классов, реализующих общий интерфейсJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Расширенная идиома Java для 2+ классов, реализующих общий интерфейс

Сообщение Anonymous »

Я столкнулся со следующей ситуацией и задаюсь вопросом, хорош ли способ, которым я ее реализовал, с точки зрения возможности повторного использования и скорости. Мне также было бы интересно иметь фактическое компилируемое решение, поскольку приведенное ниже не компилируется (надеюсь кто-то находит виновника и имеет простую и элегантную идею по этому поводу).

Существует два класса Java «Vec3F» и «Vec3», которые реализуют базовую векторную математику для операций с плавающей запятой. точечный и двойной типы. Оба реализуют интерфейс ниже следующим образом:

Код: Выделить всё

public final class Vec3 implements Vec {
//..
public double distance(Vec3 other) { /*..*/ }
}

public interface Vec {

double distance(V other);
}
Я сделал это, чтобы некоторые алгоритмы могли работать с обоими типами векторных реализаций, и вот в чем проблема:

Код: Выделить всё

public class Toolbox {

public static  double getAllDistances(List points) {
Vec prevPoint = points.get(0);
Vec point;
double sum = 0.0;
int len = points.size();
for (int i=1;i this doesn't compile:
//The method distance(T) in the type Vec is not applicable for the arguments (Vec)
sum+=point.distance(prevPoint);
prevPoint = point;
}
return sum;
}
}
Я знаю, что могу реализовать getAllDistances дважды, но этого я хочу избежать. Мне бы хотелось иметь класс Toolbox, который мог бы выполнять некоторые мета-алгоритмы на основе методов, объявленных в интерфейсе.
Я также хочу избежать изменения реализации метода, например. distance(Vec3other) для передачи интерфейса (поскольку он использует, например,other.x*other.x напрямую, чтобы избежать вызова каких-либо геттеров).

Я был бы рад за некоторые мысли по этому поводу и надеюсь, что вопрос достаточно ясен и конкретен, заранее спасибо!

Подробнее здесь: https://stackoverflow.com/questions/324 ... -interface
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»