Ich möchte C++ wie Enums in Java implementieren, also möchte ich statische Feld als ein Zähler verwenden. Dies ist meine aktuelle Lösung:Java - Enum mit statischen Zähler
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;
}
Aus dem obigen Code soll ich: Test1.toInt() -> 2, Test2.toInt() -> 3, Test3.toInt() -> 4, Test4 .toInt() -> 7, Test5.toInt() -> 8
Dieser Code funktioniert gut mit getesteten Android Java VM, aber ich bin mir nicht sicher, ob es ein gültiger Java-Code ist und ob es auf allen ordnungsgemäß funktioniert Gültige Java-VM, weil AFAIK-Enum vor statischen Feldern initialisiert wird, aber es sieht so aus als ob die Initialisierung bei Bedarf für verschachtelte Klassen mit statischem Feld in diesem Fall funktioniert (ohne geschachtelte Klasse funktioniert das einfache statische Feld nicht).
Mit freundlichen Grüßen, Patryk
Don‘ t versuchen, C++ - Strukturen in Java zu übersetzen. Java enumiert zu mächtig, um als einfache C++ - Wertcontainer missbraucht zu werden. –
Ich bin mir ziemlich sicher, dass dieser Code wird nicht kompilieren - bitte verwenden Sie echten Code in Fragen ... –
@GyroGearless Nun, dieser Code kompiliert, weil ich Initialisierung auf Anfrage verwendet habe, bin ich nur nicht sicher, ob es nicht verursachen wird Probleme zur Laufzeit auf anderen JVM. – nadro