Я хотел бы иметь общий класс Interpolator, который может интерполировать между экземплярами классов, реализующих Интерполируемый интерфейс:
interface Interpolatable {
int getDimension();
Iterator <? extends Interpolatable> getIterator(double d);
}
class Coordinate extends AnotherClass implements Interpolatable {
public int getDimension() {return 3;}
public Iterator <Coordinate> getIterator (double d) {…}
}
class Interpolator <T extends Interpolatable> {
Interpolator () {
int dim = T.getDimension();
}
void doSomething (double d) {
Iterator <? extends Interpolatable> it = T.getIterator(d);
Interpolatable t = it.next();
…
}
}
Конечно, компилятор жалуется на T.getDimension()
и T.getIterator(d)
:
Невозможно сделать статическую ссылку на нестатический метод getDimension () / getIterator (double) из типа Interpolatable.
Однако два метода нельзя сделать статическими, поскольку они определены в интерфейсе. И в то время, когда я использовал бы их в Интерполяторе, у меня нет доступного экземпляра Координаты (или любого Интерполируемого).
Есть предложения?
(Я понимаю, почему методы интерфейса не могут быть статичными; мне просто не хватает идеи, как элегантно решить такую проблему).