实例化存储在HashMap中的类的实例

时间:2013-09-10 16:02:26

标签: java generics reflection enums factory

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

枚举:

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类实现的接口]

1 个答案:

答案 0 :(得分:0)

来自InstantiationException

的javadoc
  

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

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

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