Как добавить обратный вызов для добавления текста в TextArea или другой материал в классе, который выполняет анализ? - PullRequest
0 голосов
/ 27 апреля 2011

Я хотел бы знать, как лучше всего в Java добавить обратный вызов (возможно, в качестве аргумента, так как большую часть времени я использую публичные статические методы) во внешнюю функцию, например, для добавления текста в контроль текстовой области. Я не хочу передавать ссылки на текстовую область.

Я довольно новичок в Java, отсюда и хромой вопрос.

1 Ответ

1 голос
/ 27 апреля 2011

Хорошо, насколько я понимаю, вы хотите иметь возможность вызывать метод, который обновляет текстовую область, не вызывая ее напрямую. то есть вы просто хотите отправить имя метода.

В отображении кода выводится (здесь можно добавить код, чтобы отобразить его в определенной текстовой области)

Но мы не хотим вызывать методы напрямую, мы разрешаем программе вызывать методы на основе предоставленной информации обратного вызова.

Мы используем концепцию 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); 
    }
}

Я надеюсь, что это отвечает на ваш вопрос

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...