2

我正在浏览一些应用程序的源代码,我遇到了这段代码,我无法理解这是什么。

public enum XStreamUserType {

MES_CONFIG_XSTREAM(MESConstants.MES_CONFIG_XSTREAM_USER, "MES_CONFIG_XSTREAM_USER",    new XStream());

private int userTypeId;

private String userType;

private XStream xStream;

private XStreamUserType(int userTypeId, String userType, XStream xStream) {
    this.userTypeId = userTypeId;
    this.userType = userType;
    this.xStream = xStream;
    switch (this.userTypeId) {
    case MESConstants.MES_CONFIG_XSTREAM_USER:
        loadConfigReader();
        break;
    default:
    }
}

这条线是什么意思?

MES_CONFIG_XSTREAM(MESConstants.MES_CONFIG_XSTREAM_USER, "MES_CONFIG_XSTREAM_USER",    new XStream());
4

5 回答 5

2

根据JLS-8-9

EnumConstant 中的标识符可以用在名称中以引用枚举常量。

枚举常量后面可以跟参数,在类初始化期间创建常量时,参数将传递给枚举类型的构造函数,如本节后面所述。使用正常的重载规则(第 15.12.2 节)选择要调用的构造函数。如果省略参数,则假定为空参数列表。

所以因此

MES_CONFIG_XSTREAM(MESConstants.MES_CONFIG_XSTREAM_USER, "MES_CONFIG_XSTREAM_USER",    new XStream());

表示一个Identifier,它是您声明的第一个枚举常量(它似乎是唯一的),通过调用具有以下签名private constructorenum类的 :XStreamUserType

private XStreamUserType(int userTypeId, String userType, XStream xStream) 

我想 theMESConstants.MES_CONFIG_XSTREAM_USER被评估为 an int, "MES_CONFIG_XSTREAM_USER"is aString并且new XStream()is a XStream(你可以看到与构造函数的匹配)

正确定义后,您可以进一步将新创建的枚举用作:XStreamUserType.MES_CONFIG_XSTREAM

于 2013-10-14T08:49:54.743 回答
1

这是一个使用代码中定义的构造函数创建的枚举常量。

这是构造函数:

private XStreamUserType(int userTypeId, String userType, XStream xStream) {
//...
}
于 2013-10-14T08:48:16.533 回答
0

在 java 中,枚举也可以像类一样具有实例变量和构造函数。

这里enum XStreamUserType有三个实例变量

private int userTypeId;

private String userType;

private XStream xStream;

尽管

private XStreamUserType(int userTypeId, String userType, XStream xStream) {
    this.userTypeId = userTypeId;
    this.userType = userType;
    this.xStream = xStream;
    switch (this.userTypeId) {
    case MESConstants.MES_CONFIG_XSTREAM_USER:
        loadConfigReader();
        break;
    default:
    }
}

是构造函数。

MES_CONFIG_XSTREAM是枚举变量(可以解释为类的对象),初始化MES_CONFIG_XSTREAM(MESConstants.MES_CONFIG_XSTREAM_USER, "MES_CONFIG_XSTREAM_USER", new XStream());为其实例变量的值(作为构造函数调用)。

于 2013-10-14T09:00:30.950 回答
0

它是枚举的一个元素,使用它的构造函数进行初始化

导演:

private XStreamUserType(int userTypeId, String userType, XStream xStream)

您的枚举只有一个元素,MES_CONFIG_XSTREAM但在逗号分隔的列表中您可以添加更多。

例如检查这个页面:枚举类型

于 2013-10-14T08:47:59.080 回答
0

它是一个枚举常量声明。请注意这里与最后一个行星示例的类比。

于 2013-10-14T08:49:30.083 回答