Я уверен, что на это уже был дан ответ, но я действительно не могу его найти.
У меня есть класс 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 вместо повышения, но это не то, что я делаю). Что мне не хватает?
Спасибо!