簡體   English   中英

Java-枚舉和構造函數中的函數/變量存在問題

[英]Java - Issue with functions/varibles inside an enum and a constructor

我一直在試圖理解這段Java代碼中發生了什么,但是到目前為止我還沒有管理。 這是該庫的一部分。

我的奇跡在

CURRENT_SIM_TIME(Constants.VAR_TIME_STEP), NET_BOUNDARIES(Constants.VAR_NET_BOUNDING_BOX)

它們以前沒有出現在代碼中,后來又沒有出現,因此有一個構造函數使用CURRENT_SIM_TIME而不帶任何方括號()

enum Variable {
        CURRENT_SIM_TIME(Constants.VAR_TIME_STEP), NET_BOUNDARIES(
                Constants.VAR_NET_BOUNDING_BOX), ;
        public final int id;
        private Variable(int id) {
            this.id = id;
        }
}

我正在談論的這個構造函數:

SimulationData(DataInputStream dis, DataOutputStream dos) {
        super("", Variable.class);
        addReadQuery(Variable.CURRENT_SIM_TIME,
                new ReadObjectVarQuery.IntegerQ(dis, dos,
                        Constants.CMD_GET_SIM_VARIABLE, "",
                        Variable.CURRENT_SIM_TIME.id) {

                });

        addReadQuery(Variable.NET_BOUNDARIES,
                new ReadObjectVarQuery.BoundingBoxQ(dis, dos,
                        Constants.CMD_GET_SIM_VARIABLE, "",
                        Variable.NET_BOUNDARIES.id));

        this.dis = dis;
        this.dos = dos;

    }

那么,這怎么可能呢?

里面的枚舉變量,我們有CURRENT_SIM_TIMENET_BOUNDARIES用括號內的參數,然后在構造函數中,我們創建一個addReadQueryVariable.CURRENT_SIM_TIME以及Variable.NET_BOUNDARIES ,不帶括號作為參數。

這些功能嗎? 靜態變量? 它們是否在代碼的其他部分中定義,而我找不到它們?

我現在真的迷路了...

聲明枚舉:

enum Variable {
        CURRENT_SIM_TIME(Constants.VAR_TIME_STEP), NET_BOUNDARIES(
                Constants.VAR_NET_BOUNDING_BOX), ;
        public final int id;
        private Variable(int id) {
            this.id = id;
        }
}

因此,當您在枚舉聲明中說CURRENT_SIM_TIME(Constants.VAR_TIME_STEP) ,您在調用構造函數Variable(int id) ,以便對於枚舉CURRENT_SIM_TIME ,該枚舉本身的id變量的值將設置為Constants.VAR_TIME_STEP

NET_BOUNDARIES也是如此

因此,如果要獲取CURRENT_SIM_TIMEid的值,則可以這樣做:

Variable.NET_BOUNDARIES.id

使用枚舉

使用枚舉時,無需使用構造函數調用它,因為在聲明枚舉時已經完成了。 因此,您只需要使用枚舉即可。

暫無
暫無

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

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