0

私はこれをしばらく機能させようとしてきましたが、答えを求めて高低を検索しました(ここを含む)。しかし、私はそれを理解することはできません。

だからここにコード(少し最小化):

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)...

インスタンス化しようとしているクラスは、すべての要件を満たしている必要があります。デフォルトのコンストラクターがあり、決して抽象的ではありません。なぜこのエラーが発生するのですか?

前もって感謝します!

4

1 に答える 1

1
Event$DataExtension

これは内部クラスです。静的ですか?私は勘で行き、ノーと言うつもりです。これは、含まれている Event への参照が (暗黙的に) 含まれていることを意味します。つまり、newInstance を介してインスタンス化できない可能性があります。

静的内部クラスに設定するか、イベント オブジェクトに関連付ける必要がない場合は、クラスから移動してみてください。

于 2013-01-06T08:18:54.787 に答える