我一直在努力了解这段 Java 代码中发生了什么,但到目前为止我还没有管理。这是此library 的一部分。
我的奇迹在于
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;
}
那么,这怎么可能?
在enum变量中,我们有CURRENT_SIM_TIME
和NET_BOUNDARIES
括号内的参数,然后在构造函数中我们创建addReadQuery
Variable.CURRENT_SIM_TIME
以及{{ 1}},没有括号作为参数。
这些功能吗?静态变量?它们是否在代码的其他部分中定义,我无法找到它们?
我现在真的迷失了......
答案 0 :(得分:2)
声明枚举:
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
因此,如果您想为id
获取CURRENT_SIM_TIME
的值,您可以这样做:
Variable.NET_BOUNDARIES.id
使用枚举
当你使用枚举时,你不必用构造函数调用它,因为当你声明你的枚举时已经完成了。所以你只需使用枚举。