有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java库体系结构的设计模式

1)在SomeProject中添加了Somelib,作为jar

2)在SomeProject中有somePackage。SomeClass实现了SomeLib。SomeInterface

3)SomeLib必须能够创建somePackage。SomeClass实例,但每次都不构建SomeLib

不使用反射怎么可能呢?在SomeLib中编写类似于导入somePackage的东西是不可能的。Someclass

我用的是上网本

PS我是Java的新手,我尽量说清楚


共 (3) 个答案

  1. # 1 楼答案

    您可以尝试使用以下命令实例化该类:

    Class.forName("com.bla.yourclass").newInstance();
    
  2. # 2 楼答案

    你可以添加一个硬编码的依赖项,但如果你打算重用你的库(即使你没有),你应该不惜一切代价避免这种情况

    而是使用以下模式:

    1. 创建一个工厂,用于在库中创建SomeInterface实现。(更多信息请参见Factory method pattern

    2. 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实例。但是在这里,您可以在项目中使用它来加载类,从而运行静态初始值设定项

    3. SomeLib然后可以使用工厂为SomeInterface创建一个实例

      SomeInterface si = SomeFactory.createSomeObject();
      
  3. # 3 楼答案

    我将在类路径上的平面文件(java属性或xml)中声明实现接口的类。您的库可以查找文件、读取类名并创建实例。我认为,这是一种典型的方法

    然后,不需要反射来搜索类路径中的实现者,只需要调用来创建实例