对于这个奇怪的话题名称感到抱歉,找不到合适的话题.对于我的问题,我想在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)
听起来你正在寻找Class.forName和Class.newInstance.
另一方面,请记住泛型中的类型擦除意味着你不需要知道T为了构建一个TESPluginDynListener...你可能想要接受Class<T>构造函数TESPluginDynListener并使用Class.isInstance而不是instanceof在内部onDynEvent.
| 归档时间: |
|
| 查看次数: |
155 次 |
| 最近记录: |