我想创建一个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类实现的接口]
答案 0 :(得分:0)
当应用程序尝试创建类的实例时抛出 在类Class中使用newInstance方法,但是指定了类 对象无法实例化。实例化可能会失败 各种原因包括但不限于:
- 类对象 表示抽象类,接口,数组类,a 原始类型,或
- void该类没有空构造函数
您需要检查类,以查看是否可以从没有参数的公共构造函数创建实例。