Я пытаюсь объявить интерфейс, содержащий метод, который вернет список вещей, которые реализуют как Comparator<Object>
, так и Action
, i.e.
<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<Object>
, так и Action
и использует это как возвращаемый тип, т.е.
public interface ComparatorAction extends Comparator<Object>, Action { }
List<ComparatorAction> getThings();
Но я не хочу этого делать. Должен быть способ сделать то, что я хочу, правильно? Любые идеи?
Спасибо!
P.S. У меня тяжелое время подходит для хорошего заголовка для этого сообщения, поэтому не стесняйтесь его менять.