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();
    
  • 10-05 22:45