Bom estou passando um código C# para Java. Esse código usa reflection.
C#
public static List<TEntidade> Consultar<TEntidade>(){
em java fiz assim:
public static <T extends Object> List<T> Select() {
Eu usei esse estilo de declaração nos metodos Insert e Update, e funciona. Mas acho que para esse consultar não vai dar certo, pois mais abaixo do codigo C# vem:
}[/quote]
Mas como eu pegaria o nome do objeto? com esse instanceof não dá pra colocar “.getName()”, ou dá?
[color=darkblue]Porém, tanto faz, pois não vai dar certo. Em C# a chamada para o metodo é:[/color]
Controller.Consultar<objetoEntidade>();
[color=darkblue]Em Java, quando fiz o metodo Insert, com assinatura:[/color]
private static <T extends Object> long Insert(T object) {
[color=darkblue]Só dá pra chamar assim:[/color] Controller.Insert(objetoEntidade);
[color=darkblue]Ou seja, eu não falo quem é T. Portanto, na chamada de Select, eu teria que fazer:[/color] Controller.Select();
[color=darkblue]Mas Select o que? O que eu vou selecionar? De qual tabela vou puxar? Não tem como saber, mas em C# tinha já que eu fazia “”.
Alguém sabe outro modo de se implementar isso?[/color]
if (objA instanceof objB) {
objB aux = (objB) objA;
aux.getName();
}
Cara os códigos que vc esta mostrando estão complementamente bagunçados, vc pode fazer igual do mesmo jeito em Java e em C# muitas coisas, o T é só um meio de dizer, esse metodo aceita qualquer coisa.
Faça um exemplo so, por exemplo e vamos ajuda-lo a fazer.
Vou simplificar.
Eu preciso fazer um método genérico que retorne uma lista de algum objeto. Como seria a assinatura desse método para que a chamada dele fosse assim:
[quote=JobaDiniz]Vou simplificar.
Eu preciso fazer um método genérico que retorne uma lista de algum objeto. Como seria a assinatura desse método para que a chamada dele fosse assim:
Cara acredito que não de para vc pegar o nome de um objeto Tipo (T), tentei ver aqui e não consegui, o que vc pode fazer é passar o nome como parametro no metodo
public static <T> List<T> Consultar(String tableName){
//pegar o nome do objeto T.
//com o nome eu posso saber qual tabela do banco vou consultar.
}
como de todo o modo vc vai informar o tipo do objeto
vc vai saber qual é o tipo sempre
por ex:
List<Livro> livros = Consultar("livro");
vc esta usando um tipo ja informando que vc save qual tipo é vc tbm pode passar uma classe
e usar o getName() da classe por exemplo Livro.class, e pegar o nome da classe que retornará “Livro”.
Ja ouviu falar em Hibernate? pode ser uma boa solução para sua aplicação, ORM são uma mão na roda, muito bom.
Com nossa caro amigo Felagund falou.
Vc podeira partir pra um ORM como o Hibernate ai vc poderia utilizar o Criteria que ajuda em consultas de entidades!!!
Caso contrario vc deve bolar uma maneira de gerar estas query em tempo de execução!
Vlw pela dica erdanielli.
Não vou usar hibernate. Estou “brincando” com o Java. Estava vendo se era possível passar o código que tinha de C# para Java.
Os métodos do Reflection são praticamente os mesmos, porém Java não tem tudo que o C# tem. Por exemplo, ambos tem a classe List, que na verdd em Java é interface List e a classe ArrayList…Em C# existe um método dessa classe que é bastante útil:
List lista = new List();
lista.Where(entidade => entidade.id == 24);
Existe tbm lista.Max(…); Pega o maximo segundo uma condição.
Pelo que vi, Java não possui tal tipo de estrutura.
Na verdade uma vantagem do C# sobre o Java é justamente o LINQ e as Expressões lambdas, essa segundas são conhecidas na comunidade Java como Closures. E como o Java não é determinado por uma unica empresa como o C#, a Sun esta estudando as propostas de Closures, para ver qual é a melhor, sem drasticamente a estrutura, coisa q a M$ ta nem ai se vc vai ter que reescrever um sistema inteiro :P.
Realmente não suporte a esse where, como no C#, seria ate uma ideia bacana de se implementar. Porém atualmente a unica solução é percorrer a lista e retronar os valores.
hum…encontrei esse site…não baixei o conteudo, mas parece que está implementado algo sobre Closures http://www.javac.info/
EDIT: Baixei o arquivo. Veio um .jar e alguns outros arquivos como java, javadoc, javac (com extensões .bat e .arquivo). DÚVIDA: Como eu faço pra usar o que foi implementado nesse arquivo nos meus projetos?