2017-07-02 8 views
1

Ich versuche, eine Enumeration mit Parametern, die sich in Typ unterscheiden. Zum Beispiel:Variable Enum-Argumente

enum test { 
    foo(true, 5), //true is a boolean, 5 is an integer 
    bar(20, 50), //both arguments are integers 
//........ 
} 

Wenn ich den Enum-Konstruktor schreibe, kann es nur die Beschreibung einer der beiden Variablen passen. Es könnte entweder sein:

enum test { 
    foo(true, 5), //true is a boolean, 5 is an integer 
    bar(20, 50); //both arguments are integers 

    private boolean bool; 
    private int i; 

    private test(boolean bool, int i) { 
    this.bool = bool; 
    this.i = i; 
    } 
} 

oder der Hersteller kann sein:

private test(int i, int i1) { 
    this.i = i; 
    this.i1 = i1; 
    } 

Gibt es eine Möglichkeit, mehrere ENUM-Variablen jeweils mit unterschiedlichen Parametern haben kann (unterschiedliche Art)

+0

machen Sie einfach 3 Parameter ('bool, i, i1') und stellen Sie die, die Sie nicht brauchen, auf' 0' oder 'false'. Es gibt keine Möglichkeit, dass Elemente vom Typ "test" eine andere Gruppe von Variablen haben. – zapl

+0

überlasten den Konstruktor –

Antwort

0

Sicher, Sie kann überlasten Konstruktoren, das heißt haben mehrere Konstruktoren mit dem gleichen Namen, aber mit unterschiedlicher Signatur. Wie bei der Überladung üblich, ist darauf zu achten, dass sie wie in this article beschrieben sinnvoll verwendet wird.

enum MyEnum { 
    foo(true, 5), 
    bar(20, 50); 

    private boolean bool; 
    private int num1; 
    private int num2; 

    MyEnum(boolean bool, int num) { 
     this.bool = bool; 
     this.num1 = num; 
    } 

    MyEnum(int num1, int num2) { 
     this.num1 = num1; 
     this.num2 = num2; 
    } 
    }