Предостережение: Да, я знаю, что я мог бы заставить вызывающие методы использовать Collection, а не подкласс или привести коллекцию или несколько других вещей.И, вероятно, сделаю это в ожидании ответов.Но мне любопытно, возможно ли это, и мое Google-фу никуда меня не приведет.: -)
Итак, у меня есть метод, у которого в качестве параметра указан либо Set, либо List, и он возвращает один и тот же (и, да, есть другие подклассы Collection, но ониэти два я увижу).Поэтому я попытался использовать дженерики:
private <T extends Collection<String>> T doStuff(T input) {
T output = (input instanceof List)
? new ArrayList<String>()
: new HashSet<String>();
// do stuff to fill output from input
return output;
}
В этой версии красные чернила, которые говорят, что я не могу преобразовать ArrayList в T. Я попробовал варианты этого без удачи.Есть мысли?
РЕДАКТИРОВАТЬ: Спасибо за юмористическое любопытство.Я, конечно, буду использовать что-то более простое, например, просто вернуть коллекцию, но хорошо знать, что это за проблема, для дальнейшего использования.