Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.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 - Fatal编程技术网

Java 允许类;自注册;,把他们自己加入一个名单等

Java 允许类;自注册;,把他们自己加入一个名单等,java,Java,我正在开发一个java应用程序,它将有很多贡献。我希望单个包中的类能够以某种方式“自我注册”。目前,我们有另一个类,它只是将每个类添加到列表中,如下所示: ourlist.add(newsomeclassname()) 这需要每个参与者为他们的添加添加一行这样的内容,这是我想要避免的。我想让应用程序扫描包,并自动将每个类添加到上面的列表中 我曾尝试使用一些类扫描代码来扫描包,但类类型与我们的类类型不太匹配,而且我对java太陌生,无法完全理解这个问题 运行时还是静态? 对于运行时,您可以在类中使

我正在开发一个java应用程序,它将有很多贡献。我希望单个包中的类能够以某种方式“自我注册”。目前,我们有另一个类,它只是将每个类添加到列表中,如下所示:

ourlist.add(newsomeclassname())

这需要每个参与者为他们的添加添加一行这样的内容,这是我想要避免的。我想让应用程序扫描包,并自动将每个类添加到上面的列表中

我曾尝试使用一些类扫描代码来扫描包,但类类型与我们的类类型不太匹配,而且我对java太陌生,无法完全理解这个问题

运行时还是静态? 对于运行时,您可以在类中使用静态块,并将代码放置在侧静态块中以注册它们自己。就像JDBC驱动程序的工作方式一样,向drivermanager注册。

并使用
反射
创建每个驱动程序的实例以添加到
列表中

for(Class claszz: scannedClasses){
 list.add(clazz.newInstance());//default constructor
}

试试这个:我就是这么试的。它似乎不起作用,因为类[]类型与我们正在加载的类的类型不同,eclipse一直抱怨类型不匹配。我尝试更改代码的类型以匹配,但最后一行是classes.add(Class.forName部分不起作用。有趣的问题。不幸的是,Java无法共享类级别(aka
static
)行为。我的直觉是AspectJ可能对此有一些解决方案。你研究过吗?你的问题中有几点不清楚,你说你想注册类,但在你的例子中你注册了一个实例。那么你想注册一个实例,所有实例,还是只注册这个类?你为什么要注册。你必须注册吗是在启动时注册,还是在调用构造函数后注册就足够了?是否使用Spring或Guice之类的工具?是否可以使用javaagent?