2011-01-09 2 views
1

Предположим, у меня есть следующий класс.Найти класс общего объекта

public class gen<T> { 
    public gen(){ 
    } 
    Class<T> class(){ 
     //something that figures out what T is. 
    } 
} 

Как я могу реализовать функцию класса() без дополнительной информации?

Что я здесь делаю, но я должен передать объект T в объект gen.

public class gen<T> { 
    public gen(){ 
    } 
    Class<T> class(T var){ 
    return (Class<T>) var.getClass(); 
    } 
} 

ответ

1

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

http://www.artima.com/weblogs/viewpost.jsp?thread=208860

Имеет очень хорошую дискуссию о том, как это сделать. Это сложно, зло и хаки, но это можно сделать.

+0

Хорошая находка! После прочтения я думаю, что гораздо легче придерживаться того, что у меня есть сейчас. ха-ха –

3

Вы не можете определить время выполнения T. Это связано с type erasure.

+0

Ничего себе, что-то вроде этого не может быть сделано. Java не такой гибкий, как я думал. –

+0

Я думаю, что дизайнеры думали, что обратная совместимость важнее, чем способность делать подобное отражение. На практике это редко нужно делать, верно? – sjr

3

№. Байт-коды для скомпилированной версии вашего класса не сохраняют достаточно информации для определения T из-за стирания типа. То, что вы сделали с передачей в фактическом объекте типа T, - это лучшее, что вы можете сделать.

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