2012-06-19 3 views
2

Я пытаюсь использовать строку для вызова метода?Как вызвать метод со строкой

Предположим, у меня есть класс, называемый Kyle который имеет 3 метода:

public void Test(); 
public void Ronaldo(); 
public void MakeThis(); 

И у меня есть строка с именем метода, который мне нужно позвонить:

String text = "Test()"; 

Теперь мне нужно для вызова метода, имя которого находится внутри этой строки:

Kyle k = new Kyle(); 

k.text;?

ответ

4

Для этого вам понадобится java Reflection.

См: Class.getMethod()

Использование конкретный пример:

String text = "Test"; 
Kyle k = new Kyle(); 
Class clas = k.getClass(); 

// you'll need to handle exceptions from these methods, or throw them: 
Method method = clas.getMethod(text, null); 
method.invoke(k, null); 

Это без обработки исключений, необходимых для getMethod() и Method.invoke(), и распространяется только на случай вызова методов, которые не требуют никаких аргументов.

Смотрите также:

0

Вам нужно использовать что-то под названием Reflection.

+0

Проблема с этим ответом является ссылка мертва – Wilson

0

Try отражение.

import java.lang.reflect.Method; 
class Kyle { 
    public void Test(){System.out.println("invoking Test()");} 
    public void Ronaldo(){System.out.println("invoking Ronaldo()");} 
    public void MakeThis(){System.out.println("invoking MakeThis()");} 

    public static void main(String[] args) throws Exception{ 
     Kyle k=new Kyle(); 
     String text = "Test"; 
     Class c=k.getClass(); 
     Method m=c.getDeclaredMethod(text); 
     m.invoke(k); 
    } 
} 

выход

invoking Test()

3

Отражение интересная особенность в Java. Это позволяет провести базовую интроспекцию. Здесь используют k.getClass().getMethod()

например

String text = "Test"; 
Kyle k = new Kyle(); 
Method testMethod = k.getClass().getMethod(text, new Class<?>[] { 
    /*List parameter classes here eg. String.class , Kyle.class or leave empty for none*/} 
Object returnedValue = testMethod.invoke(k, new Object[] { 
    /* Parameters go here or empty for none*/}); 
Смежные вопросы