[英]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.