Я пытаюсь объявить интерфейс, содержащий метод, который вернет список вещей, реализующих оба Comparator
и Action
, т.е.
<T extends Comparator<Object> & Action> List<T> getThings();
Компилируется нормально, но проблема возникает, когда я пытаюсь вызвать этот метод. Я хочу иметь возможность сделать это:
List<Action> things = getThings();
List<Comparator<Object>> things = getThings();
Когда я пытаюсь сделать это, я получаю следующую ошибку компиляции:
incompatible types; no instance(s) of type variable(s) T exist so that
java.util.List<T> conforms to java.util.List<javax.swing.Action>
found : <T>java.util.List<T>
required: java.util.List<javax.swing.Action>
Следующее тоже не работает:
List<? extends Action> things = getThings();
List<? extends Comparator<Object>> things = getThings();
Другой способ добиться этого эффекта - создать пустой интерфейс, расширяющий как Comparator
, так и Action
и использующий его как возвращаемый тип, т.е.
public interface ComparatorAction extends Comparator<Object>, Action { }
List<ComparatorAction> getThings();
Но я не хочу этого делать. Должен же быть способ делать то, что я хочу, верно? Есть идеи?
Спасибо!
P.S. Мне сложно придумать хорошее название для этой публикации, поэтому не стесняйтесь его менять.