我一直试图让它工作一段时间,我已经搜索了高低的答案(包括这里)。但我无法理解。
所以这里的代码(有点最小化):
public class Event<T> {
public MessageType msgType;
public int layer;
public int gameObjectId;
public String name;
public float value;
public int senderId;
public T ext;
public Event(Class<T> classType) {
if(classType != null) {
try {
ext = classType.newInstance(); //this is the failing line
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
msgType = MessageType.NONE;
layer = TypeHandler.lAll;
gameObjectId = -1;
name = null;
value = -1;
}
}
public class DataExtension {
public float[] values;
public String[] string;
public Object[] objects;
public boolean[] boolens;
}
这是问题所在:
Event<DataExtension> mSelectionEvent;
mSelectionEvent = new Event<DataExtension>(DataExtension.class, MessageType.SELECTED);
这给了我以下例外:
java.lang.InstantiationException: se.plainentertainment.bagl.v2.core.Event$DataExtension
at java.lang.Class.newInstance0(Unknown Source)
at java.lang.Class.newInstance(Unknown Source)
at se.plainentertainment.bagl.v2.core.Event.<init>(Event.java:85)
at se.plainentertainment.bagl.v2.core.SelectionHandler.<init>(SelectionHandler.java:46)...
所以,我试图实例化的类应该满足所有要求,对吧?它有一个默认的构造函数,它不以任何方式抽象。为什么我会收到此错误?
提前致谢!
答案 0 :(得分:1)
Event$DataExtension
这是一个内部阶级。它是静态的吗?我要带着预感去拒绝。这意味着它包含对包含事件的引用(隐式),这意味着您可能无法通过newInstance实例化它。
尝试将其设置为静态内部类,或者如果它不需要绑定到事件对象,则将其移出类。