当前位置: 首页 > 面试题库 >

如何在Java枚举中定义静态常量?

林彬
2023-03-14
问题内容

有什么方法可以在Java枚举声明中定义静态最终变量(有效常量)?

我想要在一个地方定义BAR(1 … n)值的字符串文字值:

@RequiredArgsConstructor
public enum MyEnum {
    BAR1(BAR_VALUE),
    FOO("Foo"),
    BAR2(BAR_VALUE),
    ...,
    BARn(BAR_VALUE);

    private static final String BAR_VALUE = "Bar";

    @Getter
    private final String value;
}

对于以上代码,我收到以下错误消息: 在定义字段之前无法引用它


问题答案:

正如IntelliJ IDEA建议的那样,在提取常量时-制作静态嵌套类。此方法有效:

@RequiredArgsConstructor
public enum MyEnum {
    BAR1(Constants.BAR_VALUE),
    FOO("Foo"),
    BAR2(Constants.BAR_VALUE),
    ...,
    BARn(Constants.BAR_VALUE);



    @Getter
    private final String value;

    private static class Constants {
        public static final String BAR_VALUE = "BAR";
    }
}


 类似资料:
  • 问题内容: 我正在查看公司其他部门维护的一些Java代码,顺便说一下,这是一些前C和C ++开发人员所维护的。普遍存在的一件事是使用静态整数常量,例如 除了缺少“最终”限定符外,这种代码也让我有些不安。我本来希望看到的是,从学校开始主要接受Java的培训,这会更像 但是,论点使我失望。为什么要比后者更好呢? 问题答案: 为什么要比后者更好呢? 这样做要好得多,因为它可以为您提供类型安全性并具有自记

  • 问题内容: Java中的静态和非静态枚举有什么区别?两种用法是相同的。 正确吗 所有静态的都在启动时加载到内存中,非静态的则按需加载 ? 如果是,那么哪种方法更好?将某些数据始终保留在内存中还是每次使用服务器资源加载它们? 问题答案: 所有的都是有效的。如果您有嵌套的枚举,则它与相同。 所有类都是延迟加载的(枚举或其他),但是在加载时,它们会一次全部加载。也就是说,您不能加载一些常量,而不能加载其

  • 问题内容: 我以为我很了解Java泛型,但是随后在java.lang.Enum中遇到了以下内容: 有人可以解释如何解释此类型参数吗?奖励点,用于提供可以使用类似类型参数的其他示例。 问题答案: 这意味着枚举的类型参数必须从本身具有相同类型参数的枚举派生。怎么会这样 通过使类型参数成为新类型本身。因此,如果我有一个名为StatusCode的枚举,则它等效于: 现在,如果你检查的限制,我们已经得到了-

  • 好的,所以我做了一些关于常量以及它们应该如何设计和使用的研究。对于我的应用程序来说,有许多枚举可以将彼此相关的术语分组是有意义的。 其想法是,当我开发具有数百个参数(其中许多参数被多次使用)和方法的web服务时,我可以使用枚举的值进行注释。在此之前,有一个巨大、令人厌恶的常量文件,其中包含冗余和未维护的值。 所以,这里有一个枚举我想使用: 这里有一个地方我想用它: 因此,如果我尝试上面的方法,就会

  • 问题内容: 我无法使用从常量中获取的枚举作为注释中的参数。我收到此编译错误:“注释属性[attribute]的值必须是枚举常量表达式”。 这是枚举代码的简化版本: 对于注释: 和班级: 该错误仅在方法B的“ theEnum = MYENUM_CONSTANT”中显示。字符串和int常量对于编译器是可以的,但Enum常量不是,即使它的值与methodA上的值完全相同。在我看来,这是编译器中缺少的功能

  • 问题内容: 我已经阅读了该问题和答案: 在Java中实现常量的最佳方法是什么? 并提出了一个决定,即枚举是实现一组常量的更好方法。另外,我在Sun网站上阅读了一个如何将行为添加到枚举的示例(请参见前面提到的文章中的链接)。因此,将带有String键的构造函数添加到枚举中以容纳一堆String值没有问题。 这里的唯一问题是,我们需要添加“ .nameOfProperty”来访问String值。因此,