Как я могу ограничить аргументы моего метода только для коллекции типа Set и List, а не для Map?

1

У меня есть аналогичные два метода для разных типов аргументов.
1. Для java.util.Set

public static <T> List<? super T> consumeSet(Set<? extends T> collection){
    return null;
}

2. Для java.util.List BR>

public static <T> List<? super T> consumeList(List<? extends T> collection){
    return null;
}

Я хочу реализовать один общий метод, который потребляет только инструменты List или Set но не Map. Я пытаюсь подписать указанную подпись метода. Правильно ли это? Если нет, может ли кто-нибудь предложить мне правильный путь? Благодарю.

public static <T,V extends Set<T> & List<T>> List<? super T> consumeListAndSetButNotMap(V collection){
        return null;
    }
  • 1
    почему бы вам не перегружать метод 1, который принимает List, а второй, который принимает Set в качестве аргумента
  • 0
    Вопрос не в том, чтобы найти альтернативы требованию, а в том, как это сделать, используя Generics в одной сигнатуре метода? это не возможно?
Показать ещё 2 комментария
Теги:
generics
collections

1 ответ

3

Вы можете использовать общий интерфейс Collection. Это не согласуется с Map.

  • 0
    Спасибо @Sezin, это одно из решений. Но что если я захочу реализовать это, используя одну сигнатуру метода? Разве это не возможно?
  • 0
    Вы имеете в виду явно установить что-то вроде этого в качестве аргумента? Метод («расширяет список» и «расширяет набор»). AFAIK, вы не можете сделать это в Java. Перегрузка является вариантом, как сказал Амит Бхардвадж.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню