1)在 SomeProject 中添加了jar的 Somelib 。
2)在 SomeProject 中,有一个 somePackage.SomeClass ,它实现了 SomeLib.SomeInterface 。
3) SomeLib 必须能够创建 somePackage.SomeClass 实例,而无需每次构建 SomeLib
不使用反射怎么办?用 SomeLib 编写像import somePackage.Someclass之类的东西是不可能的。
我正在使用Netbeans。
PS我是Java的新手,所以我尝试尽可能地清晰。
最佳答案
您可以添加一个硬编码的依赖项,但是如果您打算重用您的库(即使您不这样做),则应不惜一切代价避免这种情况。
而是使用以下模式:
SomeInterface
实现。 (有关更多信息,请参见Factory method pattern)SomeProject
中,您必须在该工厂注册SomeClass
。您可以将静态初始化程序与Class.forName
结合使用。public class SomeClass {
static {
SomeFactory.registerSomeImplementation(SomeClass.class)
}
}
Class.forName("somePackage.SomeClass") // Alternative 1
SomeClass.class.getName(); // Alternative 2
两种选择都加载类并运行静态初始化程序,但是第二种方法提供了一些更好的重构机会。
不要与
Class.forName
混淆:建议使用它的另一个答案之一是在库中创建SomeClass
实例。但是在这里,您可以在项目中使用它来加载类,从而运行静态初始化程序。 SomeLib
可以使用工厂为SomeInterface
创建一个实例。SomeInterface si = SomeFactory.createSomeObject();