static inner class和非static inner class的例項化問題(can only instantiate non-static inner class...)

某工程師$發表於2019-02-12

參考:https://blog.csdn.net/inter18099/article/details/8017117

前言:過年回來,專案突然報錯:can only instantiate non-static inner class... 

程式碼如下:

/**
 * @author fandong
 * @create 2018/12/10
 */
@Data
public class QuestionnaireAttribute {

   

    public QuestionnaireAttribute() {
    }

    @Data
    public class StartAndEndTime{

        private String startTime;

        private String endTime;

    }

}

Spring Boot 接收到Json引數後,無法構造 StartAndEndTime類的例項,過了個年,第一天上班頭暈呼呼的,一時有點懵。

原因:後來想想,其實是序列化框架 無法構造 非靜態內部類 StartAndEndTime的例項,加個 static 將其宣告為 靜態內部類就可以了。

這裡不得不說下 static inner class 和 non-static inner class 構造例項的區別:

static inner class 可以直接呼叫構造器構造,如下:

QuestionnaireAttribute.StartAndEndTime startAndEndTime = new QuestionnaireAttribute.StartAndEndTime();

non-static inner class 需要持有外部類例項的引用,所以無法直接呼叫構造器建立,需要先構造外部類例項,然後通過外部類例項呼叫構造方法建立,如下:

QuestionnaireAttribute questionnaireAttribute = new QuestionnaireAttribute();
QuestionnaireAttribute.StartAndEndTime startAndEndTime = questionnaireAttribute.new StartAndEndTime();

日常使用的話一般 static inner class比較多,所以一時遇到 non-static inner class的例項化會有點懵,?

相關文章