Я хотел бы создать контракт (интерфейс) с универсальным параметром, который предписывает, чтобы реализованный класс также был типом, указанным в универсальном параметре.
public interface SelfDefaultAlternativeDetailSupport<T extends AlternativeDetail> extends T { // syntax error (extends T)
default T resolveDetail() {
if (someConditions()) {
return this;
} else {
return getAlternativeDetails().stream()
.filter(somePredicate)
.findFirst().orElse(null);
}
}
List<T> getAlternativeDetails();
}
Пример использования
public interface CustomerDetail extends AlternativeDetail {
String getName();
}
public class Customer implements SelfDefaultAlternativeDetailSupport<CustomerDetail>, CustomerDetail {
@Override
public String getName() {
return "default name";
}
@Override
public List<AlternativeDetails> getAlternativeDetails() {
...
}
}
Другими словами, мне бы хотелось, чтобы когда класс реализовывал SomeInterface<X>
, класс также должен реализовывать X
, но приведенная выше попытка имеет синтаксис, поскольку я не могу сделать SelfDefaultAlternativeDetailSupport
extends T
.Возможно ли это в Java?