Скажем, у меня есть класс Foo, класс A и некоторый подкласс B A. A. Foo принимает A и его подкласс как общий тип. A и B оба требуют экземпляр Foo в своем конструкторе. Я хочу Foo A, чтобы быть типа А и Б Foo к типу B или суперкласс B. Таким образом, в сущности, Так что я хочу только это:Java: использование общих подстановочных знаков с подклассом
Foo<X> bar = new Foo<X>;
new B(bar);
быть возможным, если X либо A, B, или как подкласс A и B. суперкласс
до сих пор это то, что у меня есть:
class Foo<? extends A>{
//construct
}
class A(Foo<A> bar){
//construct
}
class B(Foo<? super B> bar){
super(bar);
//construct
}
вызов super(...)
не работает, потому что <A>
строже <? super B>
. Можно ли каким-либо образом использовать конструктор (или избежать дублирования кода другими способами) при одновременном применении этих типов?
Редактировать: Foo хранит коллекцию элементов общего типа параметров, и эти элементы и Foo имеют двунаправленную ссылку. Поэтому не следует связывать A с Foo.
Это не выглядит как ваш фактический код. –
Да, это упрощенная версия кода. Думаешь, я что-то пропустил? – gibberish