0

我想创建一个枚举,其中每个枚举对象都将映射到一个事件,并且将有一个与每个事件关联的类。工厂类将根据事件类型返回正确类的实例。这就是我想要做的:

枚举:

public Enum Event{

  EVENT_1("First Event",EventProcessor1.class);
  private final String eventType;
  private final Class<? extends IEventProcessor> processorClass;
  Event(String eventType, Class<? extends IEventProcessor> processorClass){
  {
    this.eventType = eventType;
    this.processorClass = processorClass;
  }
  // getters setters ignored
  ....
}

工厂:

public class EventFactory{
  ....
  public static IEventProcessor getEventProcessor(Event e){
    return e.getProcessorClass.newInstance();
  }
  ....
}

我创建新实例的行没有显示编译问题,但会引发实例化异常。所以我的问题是:为什么是例外?有什么替代方法可以做到这一点?

【IEventProcessor是所有EventProcessor类实现的接口】

4

1 回答 1

0

来自InstantiationException的 javadoc

当应用程序尝试使用类 Class 中的 newInstance 方法创建类的实例,但无法实例化指定的类对象时抛出。实例化可能由于多种原因而失败,包括但不限于:

  • 类对象表示抽象类、接口、数组类、原始类型或
  • void 该类没有空构造函数

您需要检查类,以查看是否可以从不带参数的公共构造函数创建实例。

于 2013-09-10T16:06:13.273 回答