一次实例化一堆类的正确方法

我有一个类,我需要在其中实例化Main.java一堆其他类说C1.java......。C50.java我想不出一种优雅的方法来在主类中实例化这 50 个类。如果我只是将所有实例化代码放在一个地方,它看起来会非常拥挤和丑陋。今天我有50类要实例化,明天这个计数可以增加到100,然后这种情况会变得更糟。您能否建议一种优雅的方法来实例化所有这些类,而不会使 Main 类充满实例化代码。我不知道有任何设计模式可以做到这一点。

我正在考虑创建一个需要实例化的类数组,并使用反射来实例化它们。



慕妹3146593
浏览 69回答 2
2回答

慕的地10843

答案取决于课程的用途。但是,如果您不介意以实例化类的无序集合结束,可以使用Reflections库,我想在代码行问题上也是一个简短的方法:// find out all the classes implementing MyInterfaceSet<Class<? extends MyInterface>> subTypes = reflections.getSubTypesOf(MyInterface.class);// iterate those classes and instntinate themList<MyInterface> objects = new ArrayList<>();for (Class<? extends MyInterface> clazz: subtypes) {&nbsp; &nbsp; objects.add(clazz.newInstance());}无论如何,整个设计都应该重新考虑。

墨色风雨

推荐的解决方案是使用服务加载器架构。实例化所有已注册的实现MyInterface可以简单地完成for(MyInterface&nbsp;my:&nbsp;ServiceLoader.load(MyInterface.class))&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;do&nbsp;something&nbsp;with&nbsp;<my>&nbsp;*/ &nbsp;&nbsp;&nbsp;&nbsp;}为了使这项工作有效,仅实现接口是不够的,必须将这些实现声明为服务提供者,要么通过META-INF/services/jar 文件中的条目(如链接类文档中所述),要么通过providesJava 模块声明中的声明,当使用 Java 9 或更新版本。这样做的好处不仅是更高的性能,与使用反射库搜索整个类路径相比,它还确保在将来使用 Java 的模块系统时建立必要的访问权限。另请参阅Java 9 版本的类文档。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java