1

对不起,奇怪的主题名称,找不到合适的。对于我的问题,我想在 Java 中创建一些动态的东西,它是一个非常简单的类,可以接受一个事件并将其扔掉,遗憾的是我正在使用的系统是这样的,所以每个事件都必须有它自己的事件所在的方法方法的参数,但好消息是我们可以添加任意数量的事件监听器类!我希望我的程序能够通过添加和删除监听类来动态添加和删除正在监听的方法。

我不擅长 Java,但对 C# 有相当多的过期时间,所以我像在那里一样攻击了我的问题并创建了这个类。

public class TESPluginDynListener<T> implements Listener {

    TESPlugin plugin;

    public TESPluginDynListener(TESPlugin plugin){
        this.plugin = plugin;
    }

    @EventHandler(ignoreCancelled=false, priority = EventPriority.LOW)
    public void onDynEvent(T event){
        if(event instanceof Event)
            plugin.onEvent((Event)event);
    }
}

这似乎工作正常,但我的问题是,我必须注册的事件是否作为字符串得到,例如“some.package.someEvent”,我不知道如何将其转换为 T 型,所以我可以添加监听器类。

那么如何在我的类 TESPluginDynListener 中创建一个实例,其中 T 是从字符串翻译的?我对做很多 if else 不感兴趣,因为我希望它尽可能动态!

这是我想要做的事情的一个想法

String eventClass = "some.package.someEvent";

TESPluginDynListener listener = new TESPluginDynListener<Type.FromName(eventClass)>(this);
eventhandeler.RegisterListener(listener);
4

1 回答 1

7

听起来您正在寻找Class.forNameand Class.newInstance

另一方面,请记住,泛型中的类型擦除意味着您实际上不需要知道T就可以构建TESPluginDynListener...您可能希望接受Class<T>构造函数 forTESPluginDynListener和 useClass.isInstance而不是instanceofwithin onDynEvent

于 2012-11-20T17:54:48.583 回答