gpt4 book ai didi

java - 如何在匿名类中为返回 void 的方法返回 String

转载 作者:行者123 更新时间:2023-12-01 14:51:25 26 4
gpt4 key购买 nike

我有点困惑。我有以下内容:

public static String showInputDialog() {
Form frm = new Form();
final Command cmd = new Command("Ok");
final TextField txt = new TextField("Enter the text", null, 1024, 0);
frm.addCommand(cmd);
frm.append(txt);
frm.setCommandListener(new CommandListener() {

public void commandAction(Command c, Displayable d) {
if (c == cmd) {
return txt.getString(); // Error !!
} else {
return null; // Error !!
}
}
});
}

正如你所看到的,我想返回输入的对话框字符串,而匿名类方法应该返回void。我该如何解决这个问题?

最佳答案

这不会按您的预期工作。

我看到已经有一些解决方案,但我觉得对实际发生的情况进行更多讨论可能会有所帮助。

当您调用 frm.setCommandListener(new CommandListener() { ... }) 时,代码会向用户显示一个对话框,她可以在其中输入一些文本并提交,但代码不会不停止并等待用户完成。相反,代码会继续执行 - 不会产生结果。只有在用户完成输入并提交后,您才会被回调来处理结果 - 这可能会在很晚之后发生,或者根本不会发生。

我猜你有一些调用此方法的代码,例如:

public void someMethod(int foo, String bar) {

[...]
String result = MyInputForm.showInputDialog();
// do something with the result
System.out.println("hey, got a result "+ result);
[...]
}

相反,您需要重新组织它。首先编写一个处理结果的辅助类:

公共(public)静态类MyCallBack {

   public MyCallBack(... /* here pass in what you need to process the result*/) {
... remember necessary stuff in instance variables
}

public void processResult(String result) {
// do something with the result
System.out.println("hey, got a result "+ result);
[...]
}

}

然后调用方只需:

public void someMethod(int foo, String bar) {

[...]
MyInputForm.showInputDialog( new MyCallBack(... here pass in stuff ...) );
[...]
}

实际代码必须更改为:

public static String showInputDialog(final MyCallBack callback) {
Form frm = new Form();
final Command cmd = new Command("Ok");
final TextField txt = new TextField("Enter the text", null, 1024, 0);
frm.addCommand(cmd);
frm.append(txt);
frm.setCommandListener(new CommandListener() {

public void commandAction(Command c, Displayable d) {
if (c == cmd) {
return callback.processResult(txt.getString());
} else {
return; // or just omit the else part
}
}
});
}

两个问题:

  • 这种编程方式感觉相当落后,但这确实是它的工作方式。
  • 感觉不正确的是,我需要在 CommandListener 之外定义第二个帮助器类。这确实不是一个好的风格。我希望它能够得到改进,但由于我没有看到完整的代码(无论如何,这将是太多的信息),我不得不把它留给你来改进代码并摆脱困惑。虽然我觉得您想要一个模块化的、可重用的输入对话框助手,但这可能不是最好的方法;最好直接在需要结果的地方定义 FormTextFieldCommand 并使其运行。在运行后的第二步中使其可重用。

关于java - 如何在匿名类中为返回 void 的方法返回 String,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14798177/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com