在java中实例化泛型类型时的实例化异常

在java中实例化泛型类型时的实例化异常,java,generics,instantiation,Java,Generics,Instantiation,一段时间以来,我一直在努力让这个方法发挥作用,我到处寻找答案(包括这里)。但我想不出来 所以这里的代码(有点最小化): 公共类事件{ 公共消息类型msgType; 公共int层; 公共int gameObjectId; 公共字符串名称; 公众浮动价值; 公共int senderId; 公共文本; 公共事件(类类型){ if(类类型!=null){ 试一试{ ext=classType.newInstance();//这是失败的一行 }捕获(实例化异常e){ e、 printStackTrace(

一段时间以来,我一直在努力让这个方法发挥作用,我到处寻找答案(包括这里)。但我想不出来

所以这里的代码(有点最小化):

公共类事件{
公共消息类型msgType;
公共int层;
公共int gameObjectId;
公共字符串名称;
公众浮动价值;
公共int senderId;
公共文本;
公共事件(类类型){
if(类类型!=null){
试一试{
ext=classType.newInstance();//这是失败的一行
}捕获(实例化异常e){
e、 printStackTrace();
}捕获(非法访问例外e){
e、 printStackTrace();
}
}
msgType=MessageType.NONE;
layer=TypeHandler.lAll;
gameObjectId=-1;
name=null;
值=-1;
}
}
公共类数据扩展{
公众价值观;
公共字符串[]字符串;
公共对象[]对象;
公共透镜;
}
这就是问题所在:

Event<DataExtension> mSelectionEvent;

mSelectionEvent = new Event<DataExtension>(DataExtension.class, MessageType.SELECTED);
事件mSelectionEvent;
mSelectionEvent=新事件(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)...
java.lang.InstanceionException:se.plainentertainment.bagl.v2.core.Event$DataExtension
位于java.lang.Class.newInstance0(未知源)
位于java.lang.Class.newInstance(未知源)
在se.plainentertainment.bagl.v2.core.Event.(Event.java:85)
在se.plainentertainment.bagl.v2.core.SelectionHandler.(SelectionHandler.java:46)中。。。
所以,我尝试实例化的类应该满足所有要求,对吗?它有一个默认构造函数,并且它在任何方面都不是抽象的。为什么会出现这个错误

提前谢谢

Event$DataExtension
这是一个内部类。它是静态的吗?我将凭直觉说不。这意味着它包含对包含事件的引用(隐式),这意味着您可能无法通过newInstance实例化它


尝试将其设置为静态内部类,或者如果不需要将其绑定到事件对象,则将其移出类。

我只是尝试通过一些小的修改来运行此代码,没有遇到任何问题。修改内容如下:1。创建两个类文件(java文件),一个用于事件,一个用于数据扩展;2.注释掉对枚举的引用,您没有为它们提供源代码;3.创建一个要测试的主类。这个很好用。什么?好的,唯一的区别是我的DataExtension是在事件类中定义的。。。那一定是问题所在,让我检查一下。嗯,我就是这样读你的代码的。您发布的代码将无法编译。我认为DataExtension应该在事件之外定义。它现在起作用了,谢谢!:)这个类定义在另一个类中的问题以前给我带来了麻烦。我真的不知道什么时候使用它们。我的意思是,在本例中,我将扩展类放在那里,因为它仅被创建用于事件类。所以只是为了方便。但我想这是一个不好的原因?Java系统通常包含很多文件。与Python、Groovy或Scala等语言相比,Java是如何构造的。使用包和合理的名称来跟踪过去的情况,您会发现这不是一个问题。正如Tomas Malmsten指出的,我搬出了事件类,这就是问题所在。再次感谢!
Event$DataExtension