enums in java



  • Die Umwandlungsmethode ist natürlich sehr nett als static-Methode im enum selbst aufgehoben.

    Warum bietet Java nicht diese Umwandlungsmethode? Weil Java von Zeile 29 im oberen Code-Ausschnitt schlichtweg nichts wissen kann. Nicht jedes Enum muss ein solches getValue() haben. Könnte ja auch getSomethingElse(), etc. sein

    Noch ein Addon: Bitte höre auf C++ in Java programmieren zu wollen. Wenn du C++ so gerne hast, dann programmiere einfach C++ 🙂 Ist auch eine tolle Sprache. Java ist eben nicht C++ und C++ ist nicht Java. Die "best practices" etwas zu erledigen sind teilweise doch sehr verschieden (wenn auch beide größtenteils objektorientierte Sprachen sind).

    MfG SideWinder



  • Leider kann man kein Java Applett in C++ programieren

    MfG



  • wenn ich die Funktion als Member meine enum Klasse baue habe ich das problem wie überschreibe ich mich selbst

    public void Set(short value)
        {
            for(TestEnum te : TestEnum.values())
            {
                if(te.getValue() == value)
                    this = te; // geht nicht
            }
        }
    

    habt ihr noch eine Idee?



  • Destiniy schrieb:

    wenn ich die Funktion als Member meine enum Klasse baue habe ich das problem wie überschreibe ich mich selbst

    Das geht nicht. Warum um alles in der Welt soll sich ein Enum verändern?



  • ich möchte ja nicht das enum verändern sondern den Wert der Variable die von dem enum typ ist



  • Welchen Wert?
    Enumwerte sind statische Konstanten, die sich zur Laufzeit nicht ändern. Wenn du einer Enumvariablen einen neuen Enumwert zuweisen willst, geht das mittels einfacher Zuweisung:

    enum Test {
        EINS, ZWEI
    }
    
    // ...
    
    Test x = Test.EINS;
    x = Test.ZWEI;
    


  • ja und wenn ich einem ByteStream von einem Socket bekomme wo zwei Bytes genau diesen Enumwert Bilden

    Wie bekomme ich den dann zugewiesen?

    Du solltest dir vielleicht mal den ganzen thread durchlesen



  • Destiniy schrieb:

    Du solltest dir vielleicht mal den ganzen thread durchlesen

    Hoffentlich hast du das auch gemacht. Denn das mit dem Stream steht in einem anderen Post 😃

    Ich kann nur wiederhollen, dass Enum's feste Konstanten sind und sich der Wert, Name, ... nie ändern!



  • Also ich versteh nicht was ihr wollt. Ich bekomme zwie bytes über den Socket (z.: 0x01 und 0x02)

    die kann ich zu einem Word bauen 0x0201. Jetzt habe ich ein enum was genau diesen Wert enthält und möchte nur noch eine Instanz dieses enums mit dem Wert haben damit ich ein ganz normales switch machen kann

    also:

    testenum t = testenum(0x0201) // so in der Art
    
    switch (t)
    {
    ...
    }
    


  • Aber genau das hat SideWinder am 08.07.2010 um 17:11:35 (Seite 2 dieses Threads) doch schon beschrieben. Oder ist dir an dem Post noch etwas unklar?



  • ja und ich habe nochmal gefragt ob man das nicht als statische Member funktion haben kann sondern als normale Member funktion:

    e = e.Set(0x0201); // wäre die Statische Variante
    
    e.Set(0x0201); // fände ich jetzt schöner aber geht das?
    

    MfG



  • Nein, als normale Member-Funktion geht es nicht. Ein Enum-Objekt ist konstant und kann nicht verändert werden.

    Du kannst nur eine Referenz auf ein enum verändern:

    TestEnum te; // Referenz (quasi pointer) auf ein enum
    
    te = TestEnum.EINS; // ok
    te = TestEnum.ZWEI; // ok
    
    te.Set(blubb); // würde ja TestEnum.ZWEI.Set() aufrufen und die ZWEI an sich ändern wollen => nicht möglich
    
    te = TestEnum.getByBlubb(foobar); // ok, referenz zeigt nun auf die konstante die getByBlubb liefert
    

    MfG SideWinder



  • Destiniy schrieb:

    e = e.Set(0x0201); // wäre die Statische Variante
    

    Statische Methoden besser über den Typ aufrufen:

    e = TestEnum.getByShort(0x0201);
    

    MfG SideWinder


Anmelden zum Antworten