对于这个奇怪的话题名称感到抱歉,找不到合适的话。 对于我的问题,我想在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是从String转换而来的?我不想做很多其他的事情,因为我希望它尽可能地充满活力!
以下是我想要做的事情
String eventClass = "some.package.someEvent";
TESPluginDynListener listener = new TESPluginDynListener<Type.FromName(eventClass)>(this);
eventhandeler.RegisterListener(listener);
答案 0 :(得分:7)
听起来你正在寻找Class.forName
和Class.newInstance
。
另一方面,请记住,泛型中的类型擦除意味着您不需要知道T
以构建TESPluginDynListener
...您可能想要Class<T>
1}}在TESPluginDynListener
的构造函数中,并在instanceof
中使用Class.isInstance
而不是onDynEvent
。