代码之家  ›  专栏  ›  技术社区  ›  Overdose

Java库体系结构

  •  3
  • Overdose  · 技术社区  · 15 年前

    1)有 索米利布 添加为 罐子 在里面 某项目 .

    2)在 某些项目 一些包.someclass 实现 somelib.someInterface接口 .

    3) 索米利布 必须能够创建 一些包.someclass 没有生成的实例 索米利布 每一次

    没有反射怎么可能?不可能写进去 索米利布 类似的东西 导入SomePackage.SomeClass .

    我在用网豆。

    我是Java新手,我试着尽可能清楚。

    3 回复  |  直到 15 年前
        1
  •  3
  •   Daniel Rikowski    15 年前

    你只需要添加一个硬编码的依赖项,但是如果你打算重新使用你的库(即使你没有这样做),你应该不惜一切代价避免这种依赖。

    而是使用此模式:

    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
      

      两个选项都加载类并运行静态初始值设定项,但第二个选项提供了更好的重构机会。 别跟我搞混了 类名 :建议使用它创建 身体类 实例中 图书馆 . 但在这里你用它 项目 用于加载类,从而运行静态初始值设定项。

    3. SomeLib 然后可以使用工厂为 SomeInterface接口 .

      SomeInterface si = SomeFactory.createSomeObject();
      
        2
  •  1
  •   clamp    15 年前

    您可以尝试用以下方法实例化类:

    Class.forName("com.bla.yourclass").newInstance();
    
        3
  •  0
  •   Andreas Dolk    15 年前

    我会声明类,这些类在类路径中实现一个平面文件(Java属性或XML)中的接口。您的库可以查找文件、读取类名和创建实例。我认为,这是一个典型的方法。

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