Existe alguma maneira de amazenar um método dentro de uma String?

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.

Qual é o objetivo em transferir um método?

Enviar comandos para um robô.

caro amigo,
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…

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 class Teste{

public void dizerOi(){
	System.out.println("Oi");
}

public static void main(String[] args) throws Exception{
	Class clazz = Class.forName("Teste");
	Object obj = clazz.newInstance();
	Method method = clazz.getMethod("dizerOi");
	method.invoke(obj, null);
}

}[/code]

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 {
		
		public void run() {
			// método para ser armazenado na String w: Motor.A.forward();
			final String w = "";
			byte content[] = w.getBytes();

            try { 
            	output = socket.getOutputStream();
            	output.write(content.length);
                output.write(content);
                
            } catch (IOException e) {}
        }
	}

Existe alguma maneira de colocar esse método na String w do meu código?

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.

[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;

public class Teste{

public void dizerOi(){
	System.out.println("Oi");
}

public static void main(String[] args) throws Exception{
	Class clazz = Class.forName("Teste");
	Object obj = clazz.newInstance();
	Method method = clazz.getMethod("dizerOi");
	method.invoke(obj, null);
}

}[/code][/quote]

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!

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

Opa,

mais simples que isto. Da uma olhada no padrão de projeto command.
É justamente o que você precisa pra controlar o seu robô.

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…