Existe alguma maneira de amazenar um método dentro de uma String? - Java - GUJ
Existe alguma maneira de amazenar um método dentro de uma String?
leocherubini Janeiro 15, 2013, 5:53am #1
Eu estou tentando enviar métodos de um dispositivo android para outro via socket. Mas eu não sei se é possivel enviar métodos por socket,
então se eu armazenasse esses métodos em uma String seria possivel.
Jhonny_Oliveira Janeiro 15, 2013, 10:17am #2
Qual é o objetivo em transferir um método?
leocherubini Janeiro 15, 2013, 10:54am #3
Enviar comandos para um robô.
jonasjgs2 Janeiro 15, 2013, 10:56am #4
se vc pretende enviar um metodo para que outra aplicacao execute
e possivel sim… desde que a outra aplicacao sendo remota ou nao tenha a classe com este metodo…
vc podera executar o metodo que esta numa string utilizando reflection…
lembrando que… a classe que ira executar este metodo ela ira executar no objeto da aplicacao que vc esta chamando… nao o metodo
que vc tem na aplicacao chamadora…
porque um metodo nao e tratado no java como um objeto…
eu soube que apartir do java 8… vc tera o metodo como um objeto… ai sim… vc podera enviar o seu metodo para a aplicacao de destino…
mas ate o java 7 o metodo nao e um objeto…
Rodrigo_Sasaki Janeiro 15, 2013, 10:58am #5
Você pode invocar métodos via reflection, se isso resolve seu problema, mas eu sugiro que veja se essa realmente é a melhor solução, um exemplo simples fica assim: [code]import java.lang.reflect.Method;
public void dizerOi(){
System.out.println("Oi");
Class clazz = Class.forName("Teste");
Method method = clazz.getMethod("dizerOi");
leocherubini Janeiro 15, 2013, 11:15am #6
Eu quero saber se tem como armazenar este método Motor.A.forward(); dentro de um String para ser enviado em um socket. Aqui esta o exemplo do código:
private class Enviar extends Thread {
// método para ser armazenado na String w: Motor.A.forward();
final String w = "";
byte content[] = w.getBytes();
output.write(content.length);
Existe alguma maneira de colocar esse método na String w do meu código?
Rodrigo_Sasaki Janeiro 15, 2013, 11:16am #7
Eu acabei de te mostrar um exemplo de como invocar um método a partir de uma String que possui o nome dele.
A única coisa que você vai ter que fazer é separar o nome da classe do nome do método.
mariazinhahappy Janeiro 15, 2013, 11:17am #8
[quote=Rodrigo Sasaki]Você pode invocar métodos via reflection, se isso resolve seu problema, mas eu sugiro que veja se essa realmente é a melhor solução, um exemplo simples fica assim: [code]import java.lang.reflect.Method;
porque eu iria querer usar reflexion??? pode me dar exemplos no trabalho???
rafadelnero Janeiro 15, 2013, 11:21am #9
[code]porque eu iria querer usar reflexion??? pode me dar exemplos no trabalho???
A melhor forma de invocar métodos por String é por Reflection mesmo!Leia com calma o exemplo e você vai entender!
Rodrigo_Sasaki Janeiro 15, 2013, 11:35am #10
mariazinhahappy:
Existem algumas utilidades, mas reflection deve ser utilizado com cautela, porque o processamento de chamadas via Reflection é lento.
Um exemplo é você querer invocar um método "imprimir" em qualquer objeto que seja passado como argumento.
A tipagem estática do Java não permite que você faça isso diretamente, a não ser que os objetos implementem alguma interface em comum, ou tenham alguma herança em comum.
Com reflection você pode verificar se o objeto passado possui o método que você quer (independente do tipo que for passado), e caso exista pode invocá-lo.
Outro exemplo simples é um método que seta valores padrão pra todos os atributos do objeto, por exemplo:
Você envia um objeto para o método, e ele verifica todos os atributos dele, se for um int (ou qualquer outro tipo primitivo numérico) seta o valor 0, se for boolean seta false, se for um Object seta null, e aí por diante.
Existem diversas utilidades pra isso, mas como eu disse, é melhor usar com cautela, pois não fica um código muito limpo.
Já deixo uma dica, existem diversas APIs que foram criadas justamente pra abstrair o código "feio" de reflection, como o Mirror
kicolobo Janeiro 15, 2013, 12:03pm #11
mais simples que isto. Da uma olhada no padrão de projeto command.
É justamente o que você precisa pra controlar o seu robô.
Lucas_Abbatepaolo Janeiro 15, 2013, 1:15pm #12
Não sei se entendi errado…
Vc quer passar um metodo inteiro dentro de uma variavel (não so o nome) ??
Em java vc vai conseguir passar somente o nome do metodo e fazendo o uso de algumas apis é possivel vc executa-lo.
Em java você não consegue criar metodos em runtime, sendo assim vc não irá conseguir fazer o que esta querendo…