Допустим, я определил следующие интерфейсы для позиции и времени соответственно:
public interface PositionBeep {
double x();
double y();
PositionBeep generateNeighborAt(double angle, double distance);
}
public interface TimeBeep {
long timestamp();
void setTime(long timestamp);
}
и я хочу создать новый класс, который будет работать с универсальным расширением обоих этих типов:
class Sequence<T extends PositionBeep&TimeBeep> {
T createSequence(T start, double angle) {
T next = start.generateNeighborAt(angle,1000);
next.setTime(start.timestamp()+1000);
...
}
}
Я знаю, что это не работает, потому что generateNeighborAt возвращает PositionBeep, а не PositionBeep & TimeBeep.Проблема связана с моим выбором в разделении понятий времени и пространства, а затем в попытке снова объединить их с помощью обобщенных элементов, поэтому одним из возможных решений было бы объединение этих двух интерфейсов.Хотя я могу согласиться с этим, мне было интересно, существуют ли другие подходящие подходы, которые позволяют мне хранить эти две концепции отдельно и при этом иметь возможность реализовать метод 'createSequence' с обеими концепциями?
Спасибо