Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中使用来自同一文件的枚举参数值中的常量?_Java_Enums - Fatal编程技术网

如何在Java中使用来自同一文件的枚举参数值中的常量?

如何在Java中使用来自同一文件的枚举参数值中的常量?,java,enums,Java,Enums,我在我的项目中遇到了一个情况,我必须修改/重构一个枚举文件,并使用更好的编码标准。我甚至不允许创建一个新的常量文件或类似的文件 下面是我的问题的一个例子- public enum Enumtricks { // 1. private static final String DESC = "A String"; ELEMENT("A String"); // want to use constant DESC // 2. priv

我在我的项目中遇到了一个情况,我必须修改/重构一个枚举文件,并使用更好的编码标准。我甚至不允许创建一个新的常量文件或类似的文件

下面是我的问题的一个例子-

    public enum Enumtricks {

        // 1. private static final String DESC = "A String";

        ELEMENT("A String");    // want to use constant DESC

        // 2. private static final String DESC = "A String";


        private final String description;

        private Enumtricks(String description) {
            this.description = description;
        }

        public String value() {
            return this.description;
        }

    }
对于这两种情况,我都会收到错误消息- 1> 标记“字符串”上的语法错误 2> 在定义字段之前,无法引用该字段


那么,有没有一种方法可以定义常量&使用它们并避免使用字符串文字?

您的约束非常奇怪。如果我理解正确,您希望在一个文件中包含多个枚举。这在理论上是可能的,但我不推荐:

public class EnumCollection {

    public enum Enumtricks  {

        ELEMENT1("A String"),
        ELEMENT2("Another String"),
        ELEMENT3("Yet another String");

        private final String description;

        private Enumtricks(String description) {
            this.description = description;
        }

        public String value() {
            return this.description;
        }

    }

    public enum AnotherEnum {
        EN, UM, SA, RE, CO, OL;
    }
}

这是我能让您在同一个文件中使用常量作为枚举的最接近方法

public enum Enumtricks {
    ELEMENT(EnumConstants.DESC);

    private final String description;

    private Enumtricks(String description) {
        this.description = description;
    }

    public String value() {
        return this.description;
    }

    private static class EnumConstants {
        private static final String DESC = "A String";
    }
}

或者在
枚举
之外,但在同一编译单元(=同一文件)内添加一个接口,如下所示:

package test;

interface Constants {
    String DESC = "A String";
}

public enum Enumtricks {
    Enumtricks(Constants.DESC);
    private final String description;
    private Enumtricks(final String description) {
        this.description = description;
    }
    public String value() {
        return this.description;
    }
}

这样,您就可以在
enum

前面对所有常量进行分组,我们将非常感谢您提供的任何帮助/建议。我不理解您的问题。请详细说明你的目标是什么。B) 你的问题是什么。你上面的代码看起来还可以。不能在
枚举中定义常量字符串。没有必要这样做,因为您的
元素定义就是这样。我有很多enum元素,所以有很多字符串文本,但我想在开头或中间位置显示所有元素。另外,我不允许创建另一个文件来存储所有文字。不,我不想在一个文件中创建多个枚举。我的枚举是父文件。无论如何,如果我创建一个父类,并将所有常量和枚举都保留在其中,它就会工作。但是我必须访问像-EnumCollection.EnumTricks.Element1这样的内容是的,您必须这样做。这就是为什么我提到这可能不是个好主意。所以要访问元素,我们必须再往下一层。这能有效地实现吗?@53by97不,这通常是一个坏主意,而且不符合Java编码惯例。枚举的最佳实践是每个枚举有一个文件(就像每个类有一个文件一样)。您可以将所有枚举文件放在一个包(文件夹)中。这里给出的所有解决方案都试图保持在给定的约束范围内。如前所述,最好更改这些约束。在项目中实现这一点(创建内部静态类)好吗?您也可以使用外部接口(它的私有性稍低,但在其他方面微不足道),但无论“好”与否,您在约束内没有其他选择,它都可以工作,那就随它去吧。谢谢你的建议!