java - 自定义 Java 事件
问题描述
如何执行以下操作:
我需要知道如何创建某种类型的事件。
有一个名为 Stater 的类,并有一个名为 Event 的类。类启动器只会初始化所有侦听器,所以我需要从另一个类做的只是:
public class Main {
public static void main(String[] args) {
Starter starter = new Starter();
starter.start();
}
}
start() 方法只是触发名为 Event 的事件。但是,我不希望在事件触发时预设任何代码,以便我可以这样做:
public class Main {
public static void main(String[] args) {
Starter starter = new Starter();
starter.start();
}
public void onEvent(Event event) {
/*
Code when Event fires
For example, System.out.println(event.getName());
*/
}
}
onEvent 方法可以被称为任何东西。它所做的只是在 Event 被触发时运行。
我想知道如何能够创建这样的事件。几个星期以来,我一直试图找到如何做到这一点,但我做不到。任何帮助,将不胜感激!
解决方案
你应该使用什么callbacks
。在 Java 中,它通常与 lambdas 一起使用,允许编写简短且可读性强的代码。让我们创建一个类Starter
。
public class Starter {
private Consumer<Object> onStart;
public void setOnStart(Consumer<Object> onStart) {
this.onStart=onStart;
}
public void start() {
// any code
if(this.onStart != null)
this.onStart(<any params>);
}
}
现在你可以运行它了:
// ...
public static void main(String...args) [
Starter starter = new Starter();
starter.setOnStart((obj) -> System.out.println("started starter"));
starter.start();
// prints started starter
// calls the callback
}
// ...
推荐阅读
- python - 如何将 CSV 写入下一列
- php - SQL select from query 返回不正确的信息,codeigniter
- swift - Swift - 当 UITextField 是带有 UIColor.init 和 isSecureText 的 IBDesignable 时冻结
- php - WooCommerce 中 wp_set_password 函数的等价物是什么?
- c++ - 在这个输出中 7 是正确答案而不是 6
- r - ggplot 直方图 颜色渐变
- symbols - Windbg 中 sympath 命令之间的区别
- python-3.x - 在 Python 3.x 中拒绝字母并且只允许输入数字 @ 输入第一个和第二个数字
- android - 被拒绝的应用程序问题:违反权限政策
- python - 序列化器:自定义嵌套关系