[英]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_TIME
和NET_BOUNDARIES
用括號內的參數,然后在構造函數中,我們創建一個addReadQuery
與Variable.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_TIME
的id
的值,則可以這樣做:
Variable.NET_BOUNDARIES.id
使用枚舉
使用枚舉時,無需使用構造函數調用它,因為在聲明枚舉時已經完成了。 因此,您只需要使用枚舉即可。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.