2009-09-03 4 views
3

В коде, если я пишу строку кода, как это:Как получить экземпляр класса общего типа аргумента

GClass<Double> x = new GClass<Double>(); 

И пусть говорят, что класс, как это:

public static class GClass<T> { 
    private T value = null; 
    public GClass() { 
    // What is T? 
    } 
} 

Где Я вставил вопрос «Что такое T?», Я не хочу значение (то есть null), но его тип (то есть Double).

+0

В каком случае вам нужно будет это сделать? Конечно, клиент, который создает экземпляр gClass, в любом случае будет знать о его параметризованном типе? – Robert

ответ

10

Вы не можете узнать T во время выполнения, если не добавить параметр конструктора принять Class<T> параметр и передать его называют Double.class в вашем случае. Затем вы можете сохранить этот класс и использовать его позже.

Это связано с типа стиранием ... в основном дженерики просто компилятор магии, чтобы вставить соответствующие слепки и проверить, что все должны быть в порядке.

См. Раздел Type Erasure отличного Java Generics FAQ.

Возможно, вы также захотите прочитать посты Neal Gafter о super type tokens и type literals.

Смежные вопросы