传递 .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) {
     ...
}