【发布时间】:2017-01-02 21:12:37
【问题描述】:
我想在 Java 中实现类似 C++ 的枚举,所以我想使用静态字段作为计数器。这是我目前的解决方案:
public enum ETest
{
Test1(2),
Test2,
Test3,
Test4(7),
Test5;
private static class CounterHolder
{
private static int mCount = 0;
}
ETest()
{
mValue = CounterHolder.mCount;
CounterHolder.mCount++;
}
ETest(int pValue)
{
CounterHolder.mCount = pValue;
mValue = CounterHolder.mCount;
CounterHolder.mCount++;
}
public int toInt()
{
return mValue;
}
private final int mValue;
}
从上面的代码我应该得到: Test1.toInt() -> 2, Test2.toInt() -> 3, Test3.toInt() -> 4, Test4.toInt() -> 7, Test5.toInt() -> 8
此代码适用于经过测试的 Android Java VM,但我不确定它是否是有效的 Java 代码以及它是否能在所有有效 Java 的 VM 上正常工作,因为 AFAIK 枚举是在静态字段之前初始化的,但它看起来像在这种情况下,具有静态字段的嵌套类的按需初始化工作正常(没有嵌套类,简单的静态字段不起作用)。
最好的问候, 帕特里克
【问题讨论】:
-
不要尝试将 C++ 结构转换为 Java。 Java 枚举的强大方法被滥用为简单的 C++ 样式值容器。
-
我很确定该代码不会编译 - 请在问题中使用真实代码...
-
@GyroGearless 好吧,这段代码可以编译,因为我使用了按需初始化,我只是不确定它是否不会在其他JVM上导致运行时出现问题。
-
@TimothyTruckle 但是我只需要这个强大的枚举作为 C++ 中的简单值容器工作,仅此而已,所以如果这种类型真的像你说的那样强大,我应该能够实现这一点,但是我们会看到的。
-
@PatrykNadrowski “但我只需要这个强大的枚举作为来自 C++ 的简单值容器” 我认为你的意思是:我想坚持 C++编码人员认为 OOP 是... ;o)