具有类到类的名称的Java字符串

And*_*ome 1 java reflection

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

我对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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

那么如何创建一个实例我的类TESPluginDynListener,其中T是从String转换而来的?我不想做很多其他的事情,因为我希望它尽可能地动态!

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

String eventClass = "some.package.someEvent";

TESPluginDynListener listener = new TESPluginDynListener<Type.FromName(eventClass)>(this);
eventhandeler.RegisterListener(listener);
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 7

听起来你正在寻找Class.forNameClass.newInstance.

另一方面,请记住泛型中的类型擦除意味着你不需要知道T为了构建一个TESPluginDynListener...你可能想要接受Class<T>构造函数TESPluginDynListener并使用Class.isInstance而不是instanceof在内部onDynEvent.