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?
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?
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 {}