Ah, no meu TCC eu mexi praticamente só com reflection. Pra um iniciante, considero Reflection difícil de entender e como algumas outras coisas em Java, extremamente verboso.
*editado para poder indicar quais propriedades recuperar:
Se o problema é obj complexo:
[code]
a= function(obj,tableToPrint)
tableToPrint = tableToPrint or {}
if(not nil) then
for k,v in pairs(obj) do
if tableToPrint[k] then print(k,v) end
if type(obj[k])==“table” then a(obj[k],tableToPrint) end
end
print ()
end
end
b={}
a(b,{x=true})
b.x=1
a(b,{x=true})
b.y=2
a(b,{x=true})
b.z=“uma string”
a(b,{x=true})
b.w={}
b.w.x=“string de w”
a(b)[/code]
Obs: Grafo de obj sem ciclo. Se fosse com ciclo, ia ter que manter numa tabela o que já foi escrito.
[quote=renzonuccitelli]*editado para poder indicar quais propriedades recuperar:
Se o problema é obj complexo:
[code]
a= function(obj,tableToPrint)
tableToPrint = tableToPrint or {}
if(not nil) then
for k,v in pairs(obj) do
if tableToPrint[k] then print(k,v) end
if type(obj[k])==“table” then a(obj[k],tableToPrint) end
end
print ()
end
end
b={}
a(b,{x=true})
b.x=1
a(b,{x=true})
b.y=2
a(b,{x=true})
b.z=“uma string”
a(b,{x=true})
b.w={}
b.w.x=“string de w”
a(b)[/code]
Obs: Grafo de obj sem ciclo. Se fosse com ciclo, ia ter que manter numa tabela o que já foi escrito.[/quote]
entendi, você viu a minha implementação?
Vi sua implementação. Bacana, sucinto e bem organizado, além do javadoc que muitas vezes não encontro em código de terceiros.
Mas o que chamo atenção é trabalheira que se tem pra fazer algo relativamente simples no Reflection, ver qual o tipo do objeto, infinitas exceções lançadas. E quando vc vai ler um Bean pelos set and getters? Tem que ficar tratando o caso do prefixo “is” se for booleano e etc. No meu tcc (JColtrane) pra fazer parsing de string de xml em tipo java era um inferno. Vários tipos primitivos mais seus Wrapers (char, byte, short, int, long, float e double). Realmente recomendo o livro Programming in Lua pra abrir um pouco a cabeça. O livro é pequeno e explica, entre outras coisas, como implementar herança simples e múltipla (a linguagem não possui herança de forma nativa), coisa que eu achava ser difícil e é explicado em poucas páginas. Faz vc entender o porque da palavra reservada this, entender o pq a API Reflection exige que vc passe o objeto onde o método deve ser executado. Depois que li o livro até passei a programar e entender melhor o Java, ao mesmo tempo que me fez enxergar alguns “defeitos” da mesma, deixando de ser tão xiita (não estou dizendo que vc seja) ao defender a linguagem.
Engraçado tb que o Lua é feio por Brazucas da PUC RIO.
[]s
[quote=renzonuccitelli]Vi sua implementação. Bacana, sucinto e bem organizado, além do javadoc que muitas vezes não encontro em código de terceiros.
Mas o que chamo atenção é trabalheira que se tem pra fazer algo relativamente simples no Reflection, ver qual o tipo do objeto, infinitas exceções lançadas. E quando vc vai ler um Bean pelos set and getters? Tem que ficar tratando o caso do prefixo “is” se for booleano e etc. No meu tcc (JColtrane) pra fazer parsing de string de xml em tipo java era um inferno. Vários tipos primitivos mais seus Wrapers (char, byte, short, int, long, float e double). Realmente recomendo o livro Programming in Lua pra abrir um pouco a cabeça. O livro é pequeno e explica, entre outras coisas, como implementar herança simples e múltipla (a linguagem não possui herança de forma nativa), coisa que eu achava ser difícil e é explicado em poucas páginas. Faz vc entender o porque da palavra reservada this, entender o pq a API Reflection exige que vc passe o objeto onde o método deve ser executado. Depois que li o livro até passei a programar e entender melhor o Java, ao mesmo tempo que me fez enxergar alguns “defeitos” da mesma, deixando de ser tão xiita (não estou dizendo que vc seja) ao defender a linguagem.
Engraçado tb que o Lua é feio por Brazucas da PUC RIO.
[]s[/quote]
Obrigado, e quanto a ser xiita (coisa que não sou) desenvolvo em c# desde 2002 e nunca havia tido a oportunidade de desenvolver comercialmente em java(somente brincando em casa) estou gostando mas acho a produtividade dela baixa em relação a linguagens mais novas.
[quote=bruno.costa][quote=renzonuccitelli]Vi sua implementação. Bacana, sucinto e bem organizado, além do javadoc que muitas vezes não encontro em código de terceiros.
Mas o que chamo atenção é trabalheira que se tem pra fazer algo relativamente simples no Reflection, ver qual o tipo do objeto, infinitas exceções lançadas. E quando vc vai ler um Bean pelos set and getters? Tem que ficar tratando o caso do prefixo “is” se for booleano e etc. No meu tcc (JColtrane) pra fazer parsing de string de xml em tipo java era um inferno. Vários tipos primitivos mais seus Wrapers (char, byte, short, int, long, float e double). Realmente recomendo o livro Programming in Lua pra abrir um pouco a cabeça. O livro é pequeno e explica, entre outras coisas, como implementar herança simples e múltipla (a linguagem não possui herança de forma nativa), coisa que eu achava ser difícil e é explicado em poucas páginas. Faz vc entender o porque da palavra reservada this, entender o pq a API Reflection exige que vc passe o objeto onde o método deve ser executado. Depois que li o livro até passei a programar e entender melhor o Java, ao mesmo tempo que me fez enxergar alguns “defeitos” da mesma, deixando de ser tão xiita (não estou dizendo que vc seja) ao defender a linguagem.
Engraçado tb que o Lua é feio por Brazucas da PUC RIO.
[]s[/quote]
Obrigado, e quanto a ser xiita (coisa que não sou) desenvolvo em c# desde 2002 e nunca havia tido a oportunidade de desenvolver comercialmente em java(somente brincando em casa) estou gostando mas acho a produtividade dela baixa em relação a linguagens mais novas.[/quote]
Ei Bruno.
Como eu disse, eu não disse que vc é. O que eu quis dizer é que já fui xiita defendendo o Java. Hj procuro ser mais cauteloso e procurar entender quando pessoas que conhecem outras tecnologias me apontam vantagens e desvantagens. E, infelizmente ou não, o fato é que só chegamos em conclusões quando pelo menos conhecemos tecnologias diferente para comparar.
[]s
[quote=renzonuccitelli][quote=bruno.costa][quote=renzonuccitelli]Vi sua implementação. Bacana, sucinto e bem organizado, além do javadoc que muitas vezes não encontro em código de terceiros.
Mas o que chamo atenção é trabalheira que se tem pra fazer algo relativamente simples no Reflection, ver qual o tipo do objeto, infinitas exceções lançadas. E quando vc vai ler um Bean pelos set and getters? Tem que ficar tratando o caso do prefixo “is” se for booleano e etc. No meu tcc (JColtrane) pra fazer parsing de string de xml em tipo java era um inferno. Vários tipos primitivos mais seus Wrapers (char, byte, short, int, long, float e double). Realmente recomendo o livro Programming in Lua pra abrir um pouco a cabeça. O livro é pequeno e explica, entre outras coisas, como implementar herança simples e múltipla (a linguagem não possui herança de forma nativa), coisa que eu achava ser difícil e é explicado em poucas páginas. Faz vc entender o porque da palavra reservada this, entender o pq a API Reflection exige que vc passe o objeto onde o método deve ser executado. Depois que li o livro até passei a programar e entender melhor o Java, ao mesmo tempo que me fez enxergar alguns “defeitos” da mesma, deixando de ser tão xiita (não estou dizendo que vc seja) ao defender a linguagem.
Engraçado tb que o Lua é feio por Brazucas da PUC RIO.
[]s[/quote]
Obrigado, e quanto a ser xiita (coisa que não sou) desenvolvo em c# desde 2002 e nunca havia tido a oportunidade de desenvolver comercialmente em java(somente brincando em casa) estou gostando mas acho a produtividade dela baixa em relação a linguagens mais novas.[/quote]
Ei Bruno.
Como eu disse, eu não disse que vc é. O que eu quis dizer é que já fui xiita defendendo o Java. Hj procuro ser mais cauteloso e procurar entender quando pessoas que conhecem outras tecnologias me apontam vantagens e desvantagens. E, infelizmente ou não, o fato é que só chegamos em conclusões quando pelo menos conhecemos tecnologias diferente para comparar.
[]s[/quote]
Verdade, e desculpe não foi minha intenção dizer que você disse que sou xiita (eu entendi o que vc falou, apenas comentei). você tem razão, tem muita gente que defende java e as vezes sem saber do que está se falando. o cara simplesmente defende java por defender algo open source, as vezes por não ser microsoft ou porque só conhece java.
Estou trabalhando com java EE 6 glassfish vRaptor 3 sitemesh(que customizei) e estou gostando bastante de java e ela tem seus pontos fortes e pontos fracos como qualquer coisa na vida.
Fiz uns HelloWorld com VRaptor 3, achei bem bacana. Infelizmente nunca mexi com outro framework web MVC para comparar.
[]s
Reflection é baba… aqui vai um exemplo simples:
class A {
private String x;
public void setX(String x) {
this.x = x;
}
public String getX() {
return x;
}
}
class B {
private String x;
public void setX(String x) {
this.x = x;
}
public String getX() {
return x;
}
}
public class Main {
public static void main(String[] args) throws Exception {
A a = new A();
B b = new B();
a.setX("CoisaX");
System.out.println(a.getX());
String str = (String)a.getClass().getMethod("getX", null).invoke(a, null);
b.getClass().getMethod("setX", String.class).invoke(b, str);
System.out.println(b.getX());
}
}
Fim uma classe meio chunchada só pra mostrar uma idéia, faendo CAST, não sei se resolve, mas pelo menos fic ade idéia…
[code]package Objetos;
public class MultiObjeto {
// OBJETOS
class A {
private String a = "TESTE A";
public String getA(){
return this.a;
}
}
class B {
private String b = "TESTE B";
public String getB(){
return this.b;
}
}
// MAIN
public static void main(String[] args) {
MultiObjeto mo = new MultiObjeto();
mo.imprime(mo.new A());
mo.imprime(mo.new B());
}
// IMPRIMIR
public void imprime(Object obj){
String texto = "";
if(obj.getClass().getSimpleName().equalsIgnoreCase("A")){
A objA = (A) obj;
texto = objA.getA();
}else if (obj.getClass().getSimpleName().equalsIgnoreCase("B")) {
B objB = (B) obj;
texto = objB.getB();
}
System.out.println(texto);
}
}[/code]
ABs
[quote][/quote]
[quote=rcipriani]Fim uma classe meio chunchada só pra mostrar uma idéia, faendo CAST, não sei se resolve, mas pelo menos fic ade idéia…
[code]package Objetos;
public class MultiObjeto {
// OBJETOS
class A {
private String a = "TESTE A";
public String getA(){
return this.a;
}
}
class B {
private String b = "TESTE B";
public String getB(){
return this.b;
}
}
// MAIN
public static void main(String[] args) {
MultiObjeto mo = new MultiObjeto();
mo.imprime(mo.new A());
mo.imprime(mo.new B());
}
// IMPRIMIR
public void imprime(Object obj){
String texto = "";
if(obj.getClass().getSimpleName().equalsIgnoreCase("A")){
A objA = (A) obj;
texto = objA.getA();
}else if (obj.getClass().getSimpleName().equalsIgnoreCase("B")) {
B objB = (B) obj;
texto = objB.getB();
}
System.out.println(texto);
}
}[/code]
ABs[/quote]
teu teclado ta comendo letra é?
invéz de
obj.getClass().getSimpleName().equalsIgnoreCase("A")
vc pode usar:
obj.getClass().isInstance(new A());
[quote=luistiagos][quote=rcipriani]Fim uma classe meio chunchada só pra mostrar uma idéia, faendo CAST, não sei se resolve, mas pelo menos fic ade idéia…
[code]package Objetos;
public class MultiObjeto {
// OBJETOS
class A {
private String a = "TESTE A";
public String getA(){
return this.a;
}
}
class B {
private String b = "TESTE B";
public String getB(){
return this.b;
}
}
// MAIN
public static void main(String[] args) {
MultiObjeto mo = new MultiObjeto();
mo.imprime(mo.new A());
mo.imprime(mo.new B());
}
// IMPRIMIR
public void imprime(Object obj){
String texto = "";
if(obj.getClass().getSimpleName().equalsIgnoreCase("A")){
A objA = (A) obj;
texto = objA.getA();
}else if (obj.getClass().getSimpleName().equalsIgnoreCase("B")) {
B objB = (B) obj;
texto = objB.getB();
}
System.out.println(texto);
}
}[/code]
ABs[/quote]
teu teclado ta comendo letra é?
invéz de
obj.getClass().getSimpleName().equalsIgnoreCase("A")
vc pode usar:
obj.getClass().isInstance(new A());
[/quote]
BOuuaa!!
Só não sei se o que coloquei ali resolveu o problema do cidadão!!
O meu teclado não ta comendo letra não, é quando eu escrevo sem atenção fica essa blz ali