Я уверен, что на это уже был дан ответ, но я действительно не могу его найти.
У меня есть класс java SomeClass
и абстрактный класс SomeSuperClass
. SomeClass
extends SomeSuperClass
.
Другой абстрактный метод имеет метод, который возвращает Collection<SomeSuperClass>
. В классе реализации у меня есть Collection<SomeClass> myCollection
Я понимаю, что я не могу просто вернуть myCollection
, потому что Collection<SomeClass>
не наследует от Collection<SomeSuperClass>
. Тем не менее, я знаю, что все в myCollection
является SomeSuperClass
, потому что в конце концов это объекты SomeClass
, которые расширяют SomeSuperClass
.
Как я могу сделать эту работу?
т.е. Я хочу
public class A
{
private Collection<SomeClass> myCollection;
public Collection<SomeSuperClass> getCollection()
{
return myCollection; //compile error!
}
}
Единственный способ, которым я нашел, - это кастинг через не-общий тип и получение непроверенных предупреждений и еще много чего. Однако должен быть более элегантный способ? Я чувствую, что также использование Collections.checkedSet()
и друзей не нужны, поскольку статически очевидно, что возвращенная коллекция содержит только объекты SomeClass
(это не будет иметь место, если downcasting вместо повышения, но это не то, что я делаю). Что мне не хватает?
Спасибо!