getClass de um tipo T generic

Estou precisando obter o class de um T Generic:

return (T) this.manager.find(T.class, id);

Existe algum método do java 6 que retorne essa informação?

Não, não existe.

O que você pode fazer é, se você declarou a classe algo como public class Foo você consegue saber a classe fazendo um:

final ParameterizedType type = (ParameterizedType) getClass().getGenericSuperclass(); Class<T> theType = (Class<T>) (type).getActualTypeArguments()[0];

vc pode passar um Class como parametro e chamar:

objClass.getName();

abrassss

[quote=renanreismartins]vc pode passar um Class como parametro e chamar:

objClass.getName();

abrassss[/quote]

Nesse caso não funciona porque ele não tem o objeto, apenas o tipo genérico do objeto.

[quote=garcia-jj][quote=renanreismartins]vc pode passar um Class como parametro e chamar:

objClass.getName();

abrassss[/quote]

Nesse caso não funciona porque ele não tem o objeto, apenas o tipo genérico do objeto.[/quote]

Isso mesmo meu método não recebe parâmetros, tenho apenas o tipo T do generic.

exato, mas o que quis dizer é que vc pode passar a “Classe” do objeto exemplo:

public void qualquerCoisa(T coisa, Class classDaCoisa) ...

ah fmz, sem receber o Class como parametro nao funciona mesmo…

nao conhecia a solucao postada pelo garcia-jj, parabens

abrasssssss

[quote=garcia-jj]Não, não existe.

O que você pode fazer é, se você declarou a classe algo como public class Foo você consegue saber a classe fazendo um:

final ParameterizedType type = (ParameterizedType) getClass().getGenericSuperclass(); Class<T> theType = (Class<T>) (type).getActualTypeArguments()[0];
[/quote]

Uma vez precisei e também fiz desse jeito. Chato são esses Warnings:

C:\Orquestra\OrquestraLibrary\src\br\orquestra\util\ModelBusiness.java:17: warning: sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl is Sun proprietary API and may be removed in a future release
import sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl;
C:\Orquestra\OrquestraLibrary\src\br\orquestra\util\CRUD.java:16: warning: sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl is Sun proprietary API and may be removed in a future release
import sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl;
C:\Orquestra\OrquestraLibrary\src\br\orquestra\core\EntityOrq.java:18: warning: sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl is Sun proprietary API and may be removed in a future release
import sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl;
C:\Orquestra\OrquestraLibrary\src\br\orquestra\util\CRUD.java:52: warning: sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl is Sun proprietary API and may be removed in a future release
                return ((Class)((ParameterizedTypeImpl)
C:\Orquestra\OrquestraLibrary\src\br\orquestra\core\EntityOrq.java:180: warning: sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl is Sun proprietary API and may be removed in a future release
            return (IEntity) ((Class)((ParameterizedTypeImpl)

Mark, no meu não são exibidos esses warnings. Você deve importar java.lang.reflect.ParameterizedType ao invés de sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.

humm!

Blza cara! Muito obrigado! Dei um build aqui no projeto e me livrei dos warnings!!

Muito obrigado!

[quote=Marck]humm!

Blza cara! Muito obrigado! Dei um build aqui no projeto e me livrei dos warnings!!

Muito obrigado![/quote]

Quando a Sun liberou o Java como opensource muitas apis proprietárias da Sun começaram a jogar esses warnings. Um outro exemplo é o Base64Encoder/Decoder, que é indicado o uso então, pela própria Sun, do commons-codec.

Abraços

To com problema nesta linha

final ParameterizedType type = (ParameterizedType) getClass().getGenericSuperclass(); 

Esta dando problema de ClassCastException

[quote]To com problema nesta linha
view plaincopy to clipboardprint?

  1. final ParameterizedType type = (ParameterizedType) getClass().getGenericSuperclass();

final ParameterizedType type = (ParameterizedType) getClass().getGenericSuperclass();

Esta dando problema de ClassCastException[/quote]

mesmo caso que o meu. não tem Cast entre essas classes.

A<B> c = new A<B>(){};

coloque as chaves quando for instanciar o objeto {}