传递 .class 作为方法中的参数 (JAVA) (BUKKIT/SPIGOT) (自定义事件系统)
Pass .class as parameter in method (JAVA) (BUKKIT/SPIGOT) (CUSTOM EVENT SYSTEM)
我正在尝试重写Bukkit的事件系统,可能使用如下:
Bukkit.getPluginManager().registerEvents(new Listener() {
@EventHandler
public void onEvent(PlayerJoinEvent e) {
Player player = e.getPlayer();
player.sendMessage("Welcome!");
}
}, this);
不过这样比较费时,需要花时间写出来。为了(彻底地)改进我的工作流程,我正在尝试将这个系统重写为更可行和更灵活的东西。
下面是我的理想 formatting/method 的使用方式:
EventBus.register(PlayerJoinEvent.class, e -> {
Player player = e.getPlayer();
player.sendMessage("Welcome!");
}, this);
目前,我有这个:
public static void register(Class<? extends Event> clazz, Consumer<Event> consumer, JavaPlugin plugin) {
consumer.accept(clazz.newInstance());
// Bukkit.getPluginManager().registerEvents(e, plugin); // ???
}
我的理论是创建一个更有用的 class 实现 Listener,如当前使用示例所示,以便我可以使用提供的 Consumer<Event>
.
实例化它
我的问题是我需要将 PlayerJoinEvent.class
作为参数传递给 public void onEvent(<here> e) {
。
我怎样才能完成这项工作?它有几个问题,我不知道这次我该如何将它从概念变成现实。
我现在不知道去哪里,希望我提供了足够的信息。
您可以使用泛型来做到这一点,这样您就可以在方法中拥有一个 "variable" 类型。
public static <T extends Event> void register(Class<T> clazz, Consumer<T> consumer, JavaPlugin plugin) {
...
}
我正在尝试重写Bukkit的事件系统,可能使用如下:
Bukkit.getPluginManager().registerEvents(new Listener() {
@EventHandler
public void onEvent(PlayerJoinEvent e) {
Player player = e.getPlayer();
player.sendMessage("Welcome!");
}
}, this);
不过这样比较费时,需要花时间写出来。为了(彻底地)改进我的工作流程,我正在尝试将这个系统重写为更可行和更灵活的东西。
下面是我的理想 formatting/method 的使用方式:
EventBus.register(PlayerJoinEvent.class, e -> {
Player player = e.getPlayer();
player.sendMessage("Welcome!");
}, this);
目前,我有这个:
public static void register(Class<? extends Event> clazz, Consumer<Event> consumer, JavaPlugin plugin) {
consumer.accept(clazz.newInstance());
// Bukkit.getPluginManager().registerEvents(e, plugin); // ???
}
我的理论是创建一个更有用的 class 实现 Listener,如当前使用示例所示,以便我可以使用提供的 Consumer<Event>
.
我的问题是我需要将 PlayerJoinEvent.class
作为参数传递给 public void onEvent(<here> e) {
。
我怎样才能完成这项工作?它有几个问题,我不知道这次我该如何将它从概念变成现实。
我现在不知道去哪里,希望我提供了足够的信息。
您可以使用泛型来做到这一点,这样您就可以在方法中拥有一个 "variable" 类型。
public static <T extends Event> void register(Class<T> clazz, Consumer<T> consumer, JavaPlugin plugin) {
...
}