Java枚举自动递增条目?

标签 java enums

Java 是否允许像好的 C 甚至 C# 这样的东西,你可以定义一个枚举,其中的字段值自动增长,并从一个可选的给定值开始?

例如

在 C 或 C# 中:

enum Foo { A = 10, B, C, D = 5000, E, Fish };

产量 A = 10,B = 11,C = 12,D = 5000,E = 5001,鱼 = 5002。

最佳答案

在 Java 中,您根本无法显式指定序数值。它们总是从 0 开始自动递增,无法控制。

如果你想要其他自定义值,你需要将它们放在构造函数调用中并自己存储。您可以获得自动增量,但它实在是太恶心了:

import java.util.EnumSet;

// Please don't ever use this code. It's here so you can point and laugh.
enum Foo 
{ 
    A(10), B, C, D(5000), E, Fish;

    private static int nextValue;
    private int value;

    private Foo()
    {
        this(Counter.nextValue);
    }

    private Foo(int value)
    {
        this.value = value;
        Counter.nextValue = value + 1;
    }

    public int getValue() 
    {
        return value;
    }

    private static class Counter
    {
        private static int nextValue = 0;
    }
}

public class Test
{
    public static void main(String[] args)
    {
        for (Foo foo : EnumSet.allOf(Foo.class))
        {
            System.out.println(foo.name() + " " + 
                               foo.ordinal() + " " + 
                               foo.getValue());
        }
    }
}

请注意嵌套类的必要性,因为您无法访问枚举构造函数中的静态字段。恶心,恶心,恶心。请不要这样做。

关于Java枚举自动递增条目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2055415/

相关文章:

java - 如何从流中获取列表列表而不是数组列表?

c++ - C++ 中的位标志枚举

java - 使用 hibernate 将枚举值插入表

java - 在 Java 中使用嵌套枚举类型

c# - 如何在 xml 反序列化期间忽略无效的枚举值?

java.lang.IndexOutOfBoundsException : setSpan (5 . .. 5) 在设备后退按钮按下时结束超过长度 0

java - 尝试使用地形表示制作击剑 map

java - 将java文件的输出获取到jsp页面

java - 使用 Java 查找用户独立的 TEMP 目录

java - 检查字符串是否包含在枚举集中,时间复杂度为 O(1)