簡體   English   中英

在Java中實例化泛型類型時出現InstantiationException

[英]InstantiationException when Instantiate generic type in java

我一直在嘗試使它工作一段時間,並且我在高低尋找答案(包括此處)。 但我不知道。

所以這里的代碼(有點最小化):

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

因此,我要實例化的類應該滿足所有要求,對嗎? 它具有默認構造函數,並且絕不是抽象的。 為什么會出現此錯誤?

提前致謝!

Event$DataExtension

這是一個內部類。 它是靜態的嗎? 我要直言不諱。 這意味着它隱含了對包含事件的引用,這意味着您可能無法通過newInstance實例化它。

嘗試將其設置為靜態內部類,如果不需要將其與事件對象綁定,則將其移出該類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM