Wie erhalte ich die Anzahl der möglichen Elemente einer Enum?

Lesezeit: 3 Minuten

Benutzeravatar von AdrieanKhisbe
Adriaan Khisbe

Gibt es eine eingebaute Möglichkeit, die Anzahl der Elemente einer Enum mit so etwas wie Myenum.length,

Oder muss ich mir eine Funktion implementieren int size() Hardrecording der Anzahl der Elemente?

  • Reden Sie von Aufzählungen oder einer Enumeration? Dies sind nicht die gleichen.

    – Kyrill Ka

    5. Juli 2013 um 15:14 Uhr


  • Ich sprach von Aufzählungen. Das Problem ist, dass Enums in Französisch eine Abkürzung für “Enumeration” ist (wie ich im Englischen eher denke). Ich sprach also nicht von der Schnittstelle.

    – AdriaanKhisbe

    5. Juli 2013 um 15:27 Uhr

  • Ist es in Ordnung, dass ich das Kotlin-Tag hinzugefügt habe? Ich habe eine Kotlin-Lösung gegoogelt und bin hier gelandet.

    – Mahozad

    27. September 2021 um 8:19 Uhr

  • Siehe diesen verwandten Beitrag.

    – Mahozad

    27. September 2021 um 8:23 Uhr

  • Siehe auch dieses youtrack-Problem das schlägt einen leistungsfähigen Ersatz für vor Enum.values() in Kötiln.

    – Mahozad

    6. November 2021 um 12:10 Uhr

Benutzeravatar von Hunter McMillen
Hunter McMillen

Ja, du kannst die verwenden Enum.values() Methode, um ein Array von Enum-Werten zu erhalten, und verwenden Sie dann die length Eigentum.

public class Main {
    enum WORKDAYS { Monday, Tuesday, Wednesday, Thursday, Friday; }

    public static void main(String[] args) {
        System.out.println(WORKDAYS.values().length);
        // prints 5
    }
}

http://ideone.com/zMB6pG

  • Enum.values() weist jedes Mal ein neues Array zu, daher wird es nicht für hohe Anrufraten empfohlen (dh for-Loop-Bedingung). Zwischenspeichern Sie den Wert, wenn Sie ihn sehr oft aufrufen müssen.

    – Markus Hieronymus

    21. Oktober 2019 um 13:46 Uhr


  • @MarkJeronimus Auch ohne es oft anzurufen, ist dies immer noch eine schlechte Praxis. Ein Array nur für die length-Eigenschaft zuzuweisen ist albern, auch wenn es nur einmal gemacht wird.

    – Hassfeind

    4. Februar 2021 um 8:35 Uhr

  • @Hatefiend, was schlägst du vor?

    – Bouh

    5. Mai 2021 um 23:42 Uhr

Benutzeravatar von Rahul Bobhate
Rahul Bobhate

Sie können die Länge erhalten, indem Sie verwenden Myenum.values().length

Der Enum.values() gibt ein Array aller zurück enum Konstanten. Du kannst den … benutzen length Variable dieses Arrays, um die Anzahl von zu erhalten enum Konstanten.

Angenommen, Sie haben die folgende Enumeration:

public enum Color
{
    BLACK,WHITE,BLUE,GREEN,RED
}

Die folgende Anweisung weist 5 zu size:

int size = Color.values().length;

  • length ist keine Methode eines Arrays, sondern ein Eigenschaftsfeld, also würden Sie es ohne Klammern verwenden.

    – Kyrill Ka

    5. Juli 2013 um 15:18 Uhr


  • @CyrilleKa: Danke für die Benachrichtigung. Habe es korrigiert. 🙂

    – Rahul Bobhate

    5. Juli 2013 um 15:22 Uhr

Benutzeravatar von Yevhen Tkachenko
Yevhen Tkachenko

Um Anrufe zu vermeiden Werte() Methode jedes Mal:

public class EnumTest {

    enum WORKDAYS {
       Monday,
       Tuesday,
       Wednesday,
       Thursday,
       Friday;

       public static final int size;
       static {
          size = values().length;
       }
   }


   public static void main(String[] args) {
      System.out.println(WORKDAYS.size); // 5
   }
}

Benutzeravatar von jaamit
jaamit

Die Methode enum.values() wird vom Java-Compiler hinzugefügt und in den APIs nicht erwähnt.

Wo ist die Dokumentation für die Methode values() von Enum?

MyEnum.values() gibt die Enum-Konstanten als Array zurück.

Sie können also verwenden:

int size = MyEnum.values().length

Ich habe nach einer Kotlin-Antwort gesucht und diese Frage ist aufgetaucht. Also, hier ist meine Antwort.

enum class MyEnum { RED, GREEN, BLUE }
MyEnum.values().size // 3

Dies ist eine andere Möglichkeit, dies zu tun:

inline fun <reified T : Enum<T>> sizeOf() = enumValues<T>().size
sizeOf<MyEnum>() // 3

Danke an Miha_x64 für diese Antwort.

Benutzeravatar von nix
nix

Als Antwort auf die Antwort von Yevhen Tkachenko kann es weiter optimiert werden, wenn das Enum-Werte-Array verwendet wird, sodass der Compiler aufruft values() nur einmal:

public class EnumTest {

    enum WORKDAYS {
       Monday,
       Tuesday,
       Wednesday,
       Thursday,
       Friday;

       public static final WORKDAYS[] values = WORKDAYS.values();
   }

   public static void main(String[] args) {
      System.out.println(WORKDAYS.values.length); // 5
      for (int i = 0; i < WORKDAYS.values.length; i++)
         System.out.println(WORKDAYS.values[i].name());
   }
}

1449740cookie-checkWie erhalte ich die Anzahl der möglichen Elemente einer Enum?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy