Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 定义抽象对象的实现_Java_Class_Dependency Injection_Abstraction - Fatal编程技术网

Java 定义抽象对象的实现

Java 定义抽象对象的实现,java,class,dependency-injection,abstraction,Java,Class,Dependency Injection,Abstraction,我正在寻找一种方法来实现以下目标: 项目: 定义在某些事件发生时调用的抽象类(如果愿意,则定义事件处理程序) 定义将使用上面的事件处理程序触发事件的引擎 B项目: 定义抽象类的实现 启动引擎 如何注册实现类并确保在引擎运行时调用该实现类 编辑1:我的意思是我必须以某种方式定义应该为给定抽象对象调用的实现 抱歉,如果问题不太清楚,请告诉我您是否需要更多的详细信息类似的信息 class A implements EventHandlerForB { ... } public class B {

我正在寻找一种方法来实现以下目标:

项目: 定义在某些事件发生时调用的抽象类(如果愿意,则定义事件处理程序) 定义将使用上面的事件处理程序触发事件的引擎

B项目: 定义抽象类的实现 启动引擎

如何注册实现类并确保在引擎运行时调用该实现类

编辑1:我的意思是我必须以某种方式定义应该为给定抽象对象调用的实现

抱歉,如果问题不太清楚,请告诉我您是否需要更多的详细信息

类似的信息

class A implements EventHandlerForB {
...
}

public class B {
  private EventHandlerForB eventHandler;

  public void registerEventHandler(EventHandlerForB eventHandler) {
    this.eventHandler = eventHandler;
  }
...
}

public interface EventHandlerForB {
...
}

有几种“模式”试图解决这个问题。在运行时只使用JDK(6或更高版本)类,就可以在项目中传递实现的名称(使用属性文件或Java系统属性)。 然后使用
class.forName()
在类路径中找到这个类,并使用
newInstance()
实例化它


但您更喜欢使用像或Spring这样的框架,它将允许您以一种干净的方式将内容粘合在一起。

您所说的“注册实现类”是什么意思?据我所知(也许您可以给出一些更详细的说明,例如Pesudo代码)您必须将实际的B项目实现实例化为对a项目抽象类的引用。传递它时,认为构造函数可能更适合单播。此解决方案确实需要我对调用处理程序的类进行编码,但我没有这样做。使用您的对象,在我的问题中,类B将被关闭,类A将是我实现的。我实现的解决方案基于您的第一个建议,我看过Guice,可能最终会使用它,但现在这已经足够了