java - 将函数作为字符串传递的正确方法

标签 java

请允许我解释一下我正在尝试做的事情 - 我认为标题大致解释了它,但我不太确定我正在以正确的方式做事,所以请更正如果我错了!

我使用 LayeredPane 创建了一个自定义对话框。本质上,jPanel 显示在 POPUP_LAYER 上,因此出现在主要内容的顶部。此面板包含一组简单的'label-textbox-okay-cancel' 控件。我将其称为“对话面板”。

我想做什么: 单击主窗口(包含在 LayeredPane 中)上的按钮时,对话框面板 将出现并允许用户输入一些文本,然后单击确定或取消。这一切都很简单,但我希望这段代码可以重复使用,这意味着主窗口上的其他按钮将调用相同的对话框面板,但标签中的文本不同。

这当然需要我包含某种回调函数,以便 对话框面板 上的确定按钮将根据调用它的按钮运行正确的代码。

我目前的尝试是存储一个字符串,该字符串将包含当用户单击对话框面板 上的确定按钮时应运行的函数的名称。我正在尝试检索此字符串并将其转换为函数名称,到目前为止,我发现了很多对“Reflection”的引用,其中许多暗示这不是一个好主意。

在任何情况下,我都无法让任何示例代码正常工作,因为我不明白下面代码中的“obj”是什么,也无法调用该方法:

method = obj.getClass().getMethod(myCallbackString);

我的问题是:

首先,我的做法是否正确?我非常乐于接受建议,但请尽量保持简单,因为我真的才刚刚开始!

其次,上面代码中的'obj'是什么?我真的很想知道,即使这不是我应该做的事情!

我的其他想法包括:我的Dialog Panel 是否应该在其自己的类中,如果是,又如何传递回调函数?

如有任何帮助或建议,我们将不胜感激。

顺便说一句:在回答“为什么不使用普通对话框?”这个问题时我只能说我目前正在试验,我只是想看看我能不能做到这一点!

MVK

最佳答案

Java 程序传入回调函数的通常方式是传递实现特定回调函数的接口(interface)实例。虽然不是必需的,但通常匿名实现接口(interface)。

例如,这是一个接口(interface):

interface MyCallback {
    void performCallback();
}

这是您定义接受回调的对话框方法的方式:

void openWithCallback(MyCallback cb) {
    // Do something useful...
    ...
    // Perform the callback
    cb.performCallback();
}

调用该方法的方式如下:

public void OpenDialog() {
    myDialog.openWithCallback(new MyCallback() {
        public void performCallback() {
            System.out.println("Inside callback...");
        }
    });
}

关于java - 将函数作为字符串传递的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11383347/

相关文章:

java - 捕获 URL 中的所有图像并移动到幻灯片

Java解析大型XML文档

java - 确定一个数字数组是否可以分为两个数组,每个数组包含相同的数字总和

java - 在jsp中显示缓冲图像

java - Joda 日期时间 DateTimeZone

java - 我的 Switch 语句没有按预期工作

java - Android USB 权限、onPause、onResume - 不幸的是,系统 UI 已停止”

java - 将列表转换为固定大小的数组

java - 构建具有大量数据通信的系统的最佳方法是什么?

java - 快速排序不适用于大于 100 的数组