Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有类到类的名称的Java字符串_Java_Reflection - Fatal编程技术网

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

具有类到类的名称的Java字符串,java,reflection,Java,Reflection,很抱歉,主题名称很奇怪,找不到合适的主题名称。 对于我的问题,我想在Java中创建一些动态的东西,它是一个非常简单的类,可以接受一个事件并将其抛出,不幸的是,我正在使用的系统被创建,因此每个事件都必须有自己的方法,其中事件是该方法的参数,但好消息是我们可以添加我们想要的任意多的事件侦听器类!我希望我的程序能够通过添加和删除listen类来动态添加和删除正在侦听的方法 我对Java不太在行,但对C#有相当大的了解,所以我像在那里一样解决了我的问题,并创建了这个类 public class TESP

很抱歉,主题名称很奇怪,找不到合适的主题名称。 对于我的问题,我想在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);
    }
}
公共类TESPluginDynListener实现Listener{
特斯拉插件;
公共TESPluginDynListener(TESPlugin插件){
this.plugin=plugin;
}
@EventHandler(ignoreCancelled=false,priority=EventPriority.LOW)
公共事件(T事件){
if(事件实例of event)
plugin.onEvent((事件)事件);
}
}
这似乎工作得很好,但我的问题是,我必须注册的事件作为字符串,例如“some.package.someEvent”,我不知道如何将其转换为类型T,以便添加侦听器类

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

以下是我想做的事情

String eventClass = "some.package.someEvent";

TESPluginDynListener listener = new TESPluginDynListener<Type.FromName(eventClass)>(this);
eventhandeler.RegisterListener(listener);
String eventClass=“some.package.someEvent”;
TESPluginDynListener=新的TESPluginDynListener(此);
eventhandler.RegisterListener(侦听器);

听起来你在寻找和


另一方面,请记住,泛型中的类型擦除意味着您实际上不需要知道
t
,就可以构建
TESPluginDynListener
。。。您可能希望在
tesplugindynlister
的构造函数中使用
Class
,并在
onDynEvent
中使用而不是
instanceof
,这听起来像是在寻找和


另一方面,请记住,泛型中的类型擦除意味着您实际上不需要知道
t
,就可以构建
TESPluginDynListener
。。。您可能想在
tesplugindynlister
的构造函数中使用
Class
,并在
onDynEvent
中使用而不是
instanceof
,您能给我一个实现的示例吗?我已经试过了,但真的看不到如何实施它@杜姆斯通:老实说,不清楚你想在哪里做什么,所以很难给你举个例子。考虑到泛型在执行时并不真正有用,我很想让
tesplugindynlister
成为非泛型。这可能会大大简化你的生活。在我的问题中,我试着举一个小例子来说明我想做什么。“新TESPluginDynListener(这个);”基本上就是我需要帮助的地方with@DoomStone:这就是我的观点-您不能在执行时提供类型参数。摆脱泛型-它们对你没有任何好处。遗憾的是,我不能做事件或对象,它必须是类本身,否则它不会工作:(你能给我一个实现的例子吗?我已经试过了,但真的看不出如何实现它!@DoomStone:说实话,你想在哪里做什么还不清楚,所以很难给你举个例子。我很想让
TESPluginDynListener
非泛型,因为泛型不会真正是u在执行的时候非常重要。这可能会大大简化你的生活。在我的问题中,我试着做一个我想做的小例子基本上就是我需要的帮助with@DoomStone:这就是我的观点-你不能在执行时提供类型参数。去掉泛型-它们对你没有任何好处。遗憾的是,我不能做事件或对象,它必须是类本身,否则它不能工作:(