Metodo que aceita um tipo qualquer de objeto como parametro

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 :wink: