Подстановочный знак Java для приведения к типу шаблона

#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 в универсальный в конструкторе. Даже использование подстановочного знака (?) все еще вызывает проблемы при попытке преобразования из ? к Т