Reflection com parametro boolean [Resolvido]

8 respostas
J
olás, tenho a seguinte classe:
public class TesteB {

	boolean valor;

	private boolean isValor() {
		return valor;
	}

	private void setValor(boolean tipo) {
		this.valor = tipo;
	}
}
e quero invocar os metodos dinamicamente usando reflection. Tentei assim:
TesteB classeTesteB = new TesteB();
Class classeB = classeTesteB.getClass();
Method mB = classeB.getMethod("setValor", new Class[] {boolean.class});
boolean val = true;
mB.invoke(classeTesteB, new Boolean(val));

e tive o seguinte erro: java.lang.NoSuchMethodException

acho que o problema esta relacionado com o tipo boolean, fiz um teste usando int e funcionou corretamente.

alguém?

8 Respostas

E

Não, o problema é que você declarou o método como “private”.

J

corrigido.
obrigado

Marky.Vasconcelos

Voce pode acessar métodos privados também. Mas com o método getDeclaredMethod e deixar o campo acessivel.

TesteB classeTesteB = new TesteB();
Class classeB = classeTesteB.getClass();
Method mB = classeB.getDeclaredMethod("setValor", new Class[] {boolean.class});
mB.setAcessible(true);
boolean val = true;
mB.invoke(classeTesteB, new Boolean(val));
E

É, e esse é um dos problemas de quem vai querer portar algo de Java para alguma linguagem .NET.
O Java deixa você fazer isso*, mas as linguagens .NET** (como o C#) não têm essa “válvula de escape”.
Eu aconselho a saber que existe essa possibilidade, mas evitar o uso se for possível.

  • Filosofia: “eu sei o que estou fazendo, e não me encha o saco”
    ** Filosofia: “eu sou um programador burro e não quero dar um tiro no pé”.
Marky.Vasconcelos

Nem sabia que .NET tinha Reflection (nem precisava saber).

E quem que esta começando um sistema em Java e quer porta-lo pra .NET? Normalmente não é o contrario?

E

Mark_Ameba:

E quem que esta começando um sistema em Java e quer porta-lo pra .NET? Normalmente não é o contrario?

Ora, pois pois…

Hibernate -> NHibernate
BouncyCastle -> BouncyCastle (.NET)
etc.

Se você pensar em um pacote com “J” provavelmente alguém já teve a idéia de portá-lo para a sua versão “N”. Mesmo o Scala ( http://www.scala-lang.org ) originalmente tinha versões Java e C#, mas com o passar do tempo o port dele para a CLR ficou meio “ao relento”.

Marky.Vasconcelos

Estou falando aqui de sistemas e não frameworks.

Os cara do .NET merecem um hibernate da vida.

J

valeu pelas explicações, vou prestar atenção… dependendo da performance meu sistema terá que ser portado pra C++.
é um sistema de tempo real que supervisiona subestações de energia elétrica, roda 24x7.
abraço

Criado 8 de outubro de 2009
Ultima resposta 15 de out. de 2009
Respostas 8
Participantes 3