Java库体系结构的设计模式
1)在SomeProject中添加了Somelib,作为jar
2)在SomeProject中有somePackage。SomeClass实现了SomeLib。SomeInterface
3)SomeLib必须能够创建somePackage。SomeClass实例,但每次都不构建SomeLib
不使用反射怎么可能呢?在SomeLib中编写类似于导入somePackage的东西是不可能的。Someclass
我用的是上网本
PS我是Java的新手,我尽量说清楚
# 1 楼答案
您可以尝试使用以下命令实例化该类:
# 2 楼答案
你可以添加一个硬编码的依赖项,但如果你打算重用你的库(即使你没有),你应该不惜一切代价避免这种情况
而是使用以下模式:
创建一个工厂,用于在库中创建
SomeInterface
实现。(更多信息请参见Factory method pattern)在
SomeProject
中,您必须向该工厂注册SomeClass
。您可以使用静态初始值设定项与Class.forName
结合使用两种方法都加载类并运行静态初始值设定项,但第二种方法提供了更好的重构机会。 不要与
Class.forName
混淆:另一个答案建议使用它在库中创建SomeClass
实例。但是在这里,您可以在项目中使用它来加载类,从而运行静态初始值设定项SomeLib
然后可以使用工厂为SomeInterface
创建一个实例# 3 楼答案
我将在类路径上的平面文件(java属性或xml)中声明实现接口的类。您的库可以查找文件、读取类名并创建实例。我认为,这是一种典型的方法
然后,不需要反射来搜索类路径中的实现者,只需要调用来创建实例