#java #generics
Вопрос:
import com.google.common.collect.Multimap; import java.util.Collection; public class GenericsTest { private final Multimaplt;String, Boxlt;?gt;gt; boxMultimap; public GenericsTest(Multimaplt;String, Boxlt;?gt;gt; boxMultimap) { this.boxMultimap = boxMultimap; } public lt;Tgt; Collectionlt;Boxlt;Tgt;gt; get(final String boxType) { final Collectionlt;Boxlt;Tgt;gt; boxes = boxMultimap.get(boxType); return boxes; } }
Коробка:
public class Boxlt;Tgt; { // T stands for "Type" private T t; public void set(T t) { this.t = t; } public T get() { return t; } }
Как бы я привел boxMultimap.get(boxType);
тип lt;Tgt;
для этого конкретного get
примера метода. Вышесказанное не удается извлечь из multimap.
Следующее работает просто отлично:
public class GenericsTest { private final Multimaplt;String, Boxgt; boxMultimap; public GenericsTest(Multimaplt;String, Boxgt; boxMultimap) { this.boxMultimap = boxMultimap; } public lt;Tgt; Collectionlt;Boxlt;Tgt;gt; get(final String boxType) { final Collection boxes = boxMultimap.get(boxType); return boxes; } }
Но я хотел быть явным в переменной коллекции локальных ящиков ( final Collectionlt;Boxlt;Tgt;gt; boxes = boxMultimap.get(boxType);
).
Комментарии:
1. может быть, сделать класс действительно универсальным? поскольку ваша проблема в том, что вы также не объявляете универсальный тип
Box
в конструкторе, это вызовет предупреждение, которое я предполагаю2. Вы случайно не знаете, какие типы элементов для данного
boxType
? В какой-то момент вам понадобится выполнить небезопасный бросок.3. Я пробовал разные варианты превращения Box в универсальный в конструкторе. Даже использование подстановочного знака (?) все еще вызывает проблемы при попытке преобразования из ? к Т