2010-12-14 4 views
1

извинения, если это дубликат.программно определяет общий тип

Есть ли способ определить, какой тип общего класса является классом?

то есть я хочу знать, что T есть ....

public void doSomething(SomeClass<T> thing) 
{ 
    Class<T> t = ???; 
} 

спасибо, стр.

+1

Во время выполнения? Nope -> поиск класса erasue, на compiletime быть более конкретным – stacker

ответ

3

Не на Java. Вам также придется принять параметр Class<T>, который должен будет предоставить вызывающий абонент. (Вы можете сделать это в конструкторе, если хотите, чтобы ссылка на класс была доступна всем методам класса.) Это обычно используемый хак, чтобы определить, что означает T во время выполнения, что недоступно в противном случае из-за Java реализует дженерики.

0

Вы можете сделать это до тех пор, пока T параметризуется определением класса . Пример:

interface IContainer<T> { 
    public void doSomething(SomeClass<T> thing) { 
    Class<?> t = TypeResolver.resolveArgument(getClass(), IContainer.class); 
    } 
} 

class ConatinerImpl implements IContainer<String> {} 

Смотрите TypeTools для получения дополнительной информации об использовании TypeResolver.

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