Java - 枚举和构造函数中的函数/变量问题

时间:2016-05-11 09:31:06

标签: java enums

我一直在努力了解这段 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_TIMENET_BOUNDARIES括号内的参数,然后在构造函数中我们创建addReadQuery Variable.CURRENT_SIM_TIME以及{{ 1}},没有括号作为参数。

这些功能吗?静态变量?它们是否在代码的其他部分中定义,我无法找到它们?

我现在真的迷失了......

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_TIMEid变量的值将设置为该枚举本身就是Constants.VAR_TIME_STEP

NET_BOUNDARIES

的情况类似

因此,如果您想为id获取CURRENT_SIM_TIME的值,您可以这样做:

Variable.NET_BOUNDARIES.id

使用枚举

当你使用枚举时,你不必用构造函数调用它,因为当你声明你的枚举时已经完成了。所以你只需使用枚举。