Javaで列挙型のようにC++を実装したいので、staticフィールドをカウンタとして使用したいと思います。これは私の現在のソリューションです:Java静的カウンタ付き列挙型
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コードであれば、すべて正常に動作するかどうかわかりませんAFAIK enumは静的フィールドの前に初期化されているため、有効なJavaのVMは静的フィールドの初期化のように見えますが、この場合静的フィールドは正常に動作します(入れ子クラスなし、単純静的フィールドは機能しません)。
敬具、すべての準拠したJVMで期待どおりのコードは動作するはずですのでETest
が初期化される前に はPatryk
ドン」をC++構造体をJavaに変換しようとしないでください。 Javaの列挙型は、単純なC++スタイルの値のコンテナとして悪用されるほど強力です。 –
私はかなりそのコードがコンパイルされないことを確信しています - 質問で実際のコードを使用してください... –
@GyroGearlessまあ、このコードは、私が要求に応じて初期化を使用したためコンパイルします。他のJVM上の実行時の問題 – nadro