У меня есть некоторый код, как этотКак использовать подстановочные дженерики с Sets.powerSet
import com.google.common.collect.Sets;
public void handleInput(Set<Object> conditions){
Set<Set<Object>> powerSet = Sets.powerSet(conditions);
...
}
Это прекрасно работает. Но я хочу сделать это:
public void handleInput(Set<? extends Object> conditions){
Set<Set<? extends Object>> powerSet = Sets.powerSet(conditions);
...
}
, так что я могу получить Powerset объектов, которые являются подклассами объекта. Но это не скомпилируется, и я получаю ошибку:
Type mismatch: cannot convert from Set<Set<capture#1-of
? extends Object>> to Set<Set<? extends Object>>
Как достичь этой цели?
EDIT: Я думаю, что это связано с тем, что генерический тип стирается во время компиляции, поэтому компилятор не может знать, что powerSet не добавит что-то незаконное к создаваемым наборам. Я переработал клиент, введя все входы в Object и полностью удалив подстановочный знак. Это лучший способ? Благодаря!
Что делает? extends Object 'дает вам? Каждый класс java расширяет Object в какой-то момент. Это избыточно. – slnowak
Это не имеет никакого отношения к стиранию, вам просто нужен 'Set extends Set расширяет Foo >> '. –