java - 如何创建添加侦听器并允许添加 JAVA 代码的方法
问题描述
几天来我一直在尝试制作事件系统,但我找不到执行以下操作的方法。
我找不到使事件可从方法交互的方法,我的意思是:
api.addEventListener (event -> {
CODE
);
操作很简单,我希望在该方法中向侦听器触发事件时,我可以添加我的代码。
我对 Java 比较陌生,但仍然在为这种事情苦苦挣扎。
我目前有这 5 个课程:
此接口对应于侦听器,即接收事件的接口。
public interface UserCreateMessageListener extends GloballyAttachableListener {
void fire ();
}
执行上述。
public class UserCreateMessageListenerImpl implements UserCreateMessageListener {
@Override
public void fire () {
//CODE
}
}
此接口将包含添加侦听器和通过添加代码接收事件的方法(我打算在上面的示例中查找)
public interface GloballyAttachableListener {
default void addUserCreateMessageEvent (UserCreateMessageListener listener) {
// I add the listeners to my listener initializer
}
}
此类向声明的侦听器触发事件。
public class Initializer extends ListenerAdapter {
private static List <UserCreateMessageListener> listeners = new ArrayList <UserCreateMessageListener> ();
public static void addListener (UserCreateMessageListener toAdd) {
listeners.add (toAdd);
}
}
@Override
public void onMessageReceived (MessageReceivedEvent event) {
for (UserCreateMessageListener e: listeners) {
e.fire ();
}
}
这个类是我打算从中获取信息和事件的类。
public interface Api extends GloballyAttachableListener {
default String getPrefix () {
return ConfigAccessor.getPrefix ();
}
default long getId () {
return ConfigAccessor.getId ();
}
}
解决方案
如果您有一个对象的方法与您的侦听器的签名相匹配(即在这种情况下void
返回类型且没有参数):
class Thing {
void whatever();
}
您可以使用方法引用来引用它:
Thing thing = new Thing();
initializer.addListener(thing::whatever);
您还可以将侦听器指定为功能接口:
@FunctionalInterface
public interface UserCreateMessageListener ... {
}
推荐阅读
- python - 使用机器学习示例执行 AWS 预测性维护时出现导入错误
- opengl - 如何在兼容性配置文件中使用 GL_QUADS?
- python - 熊猫数据框:使用 agregate 和 groupby 函数后如何选择列
- python - 使用 re 和 gspread 的多个搜索字符串
- reporting-services - SSRS 报告订阅历史
- shell - 如何检查是否更新了大 CDN 文件而不在存储库中存储相同的文件且没有数据库?
- python - 基本 django 站点给出错误为“未找到:/nettrack/
- reactjs - 在 bootstrap-react-table-2 中创建/获取全局数据 ID
- python - 将天数转换为日期时间
- capl - linUpdateResponse 与输出 - LIN 模拟节点有何不同?