繁体   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