Хорошо, насколько я понимаю, вы хотите иметь возможность вызывать метод, который обновляет текстовую область, не вызывая ее напрямую.
то есть вы просто хотите отправить имя метода.
В отображении кода выводится (здесь можно добавить код, чтобы отобразить его в определенной текстовой области)
Но мы не хотим вызывать методы напрямую, мы разрешаем программе вызывать методы на основе предоставленной информации обратного вызова.
Мы используем концепцию Reflections для инициализации классов, вызова методов и т. Д.
Класс: MainCallBack.java
мы передаем имя вызываемого метода,
функция displayAnswer (int, String) примет отображаемое число, а также метод, который должен быть вызван. (не уверен, что это то, что вы подразумеваете под CallBack)
Я добавил комментарии в каждой строке, чтобы объяснить, что делает функция.
следующая строка кода в displayAnswer
выполняет фактический вызов.
methods[i].invoke(classObject, answer);
Если вы хотите вызвать статический метод, используйте «null» вместо «classObject»
methods[i].invoke(null, answer);
Созданные классы в пакете com.callback
Чтобы уменьшить количество строк кода, я использовал Исключение вместо конкретных исключений.
Класс MainCallBack.java
package com.callback;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class MainCallBack {
public static void main(String[] args)
{
MainCallBack mainCallBk = new MainCallBack();
String sCallBackMethodName = "displaySumInTextArea"; //this is the name of the callback method.
int z = 11 ;
mainCallBk.displayAnswer( z , sCallBackMethodName );
}
private void displayAnswer(Integer answer , String sCallBackMethod)
{
try {
Class className = Class.forName("com.callback.CallBackClass"); //will assume that we know the class name
Constructor classConstructor = className.getConstructor(); // get the constructor of the class.
Object classObject = classConstructor.newInstance(); //create an instance.
Method[] methods = className.getDeclaredMethods(); //get all methods within the class.
for (int i = 0; i < methods.length; i++)
{
String dataMethod = methods[i].getName(); // iterate through array of methods and get each name
if(dataMethod.equalsIgnoreCase(sCallBackMethod)) //comparing callbackname with every method in class.
{
methods[i].invoke(classObject, answer); // invoke the method if they match with what the user is calling.
// if 'displaySumInTextArea( int )' was static then we would use 'null' (without quotes) in place of the classObject.
}
}
} catch (Exception e) {
e.printStackTrace(); //use specific exceptions here
}
}
}
класс CallBackClass.java
package com.callback;
public class CallBackClass {
public void displaySumInTextArea(Integer sum)
{
System.out.println("Sum = " + sum);
}
}
Я надеюсь, что это отвечает на ваш вопрос