Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.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/8/api/5.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_Api_Events_Plugins_Reflection - Fatal编程技术网

Java 如何将一个对象投射到另一个对象?

Java 如何将一个对象投射到另一个对象?,java,api,events,plugins,reflection,Java,Api,Events,Plugins,Reflection,首先,如果问题措辞错误。让我知道,我不知道这个问题怎么说。^^' 好的,现在,我正在开发一个插件API,这样人们就可以在不修改源代码的情况下改变程序的行为,而那些不能编程但仍想修改的用户可以下载其他已经制作的插件。 现在,我正在开发一个事件系统,如果触发了一个事件,插件可以检测到一个用户对它的反应。我希望用户能够输入以下代码: handleEvent(Event e) {} 然后使用: if(e instanceof <EVENTTYPE>) { <EVENTTYPE

首先,如果问题措辞错误。让我知道,我不知道这个问题怎么说。^^'

好的,现在,我正在开发一个插件API,这样人们就可以在不修改源代码的情况下改变程序的行为,而那些不能编程但仍想修改的用户可以下载其他已经制作的插件。 现在,我正在开发一个事件系统,如果触发了一个事件,插件可以检测到一个用户对它的反应。我希望用户能够输入以下代码:

handleEvent(Event e) {}
然后使用:

if(e instanceof <EVENTTYPE>) {
    <EVENTTYPE> e2 = (<EVENTTYPE>) e;
    // Do code here that could not be normally accessible without casting
}
if(e instanceof){
e2=()e;
//在这里执行不强制转换就无法正常访问的代码
}

但我不知道如何做到这一点,所以我没有代码显示。但是,如果你想要我所拥有的代码,它可以很好地工作(除了这个,我说我不知道怎么做),我可以给你

任何类的子类都可以向原始类添加额外的方法。如果类型为该子类的对象被类型为超类的变量引用,那么这些额外的方法将不可见,因为变量的类型不知道它们。为了使额外的方法变得可用,需要将对象指定给正确类型的变量,这需要向下转换。你的例子就是这样

请注意,您不能强制转换对象,只能转换引用(和基本体)。您的问题是什么?你是在问如何实现一个事件机制吗?不,我已经在工作了,我的意思是我想这样做,如果一个插件正在侦听主事件类本身,而不是一个特定的事件类,那么当PluginManager将它抛出给所有正在侦听的插件时,就这样做,我可以这样做,插件可以使用上面的代码,并将主事件对象强制转换为某个事件(如果该事件是被抛出的事件)。是的,我知道这一点。但我使用的是反射,因为这是我软件上的插件用来扩展它的API,而不是其他软件用来扩展自己的API。我在问,当我的软件触发事件让插件做出反应时,如果事件有子类,用户可以将其强制转换到它,然后使用通常不可访问的函数,除非专门听。但是,谢谢你的帮助!对不起,我没听清你的要求没关系,我在现实生活中经常这样做:堆栈溢出