String-Enum vergleichen.

BLR

Erfahrenes Mitglied
Hallo,

entweder kann ich nicht mehr richtig sehen, aber ich verstehe gerade nicht, wieso "equals" in diesem Fall false zurück gibt.


Java:
public class EwsServiceTest {

   public  enum Trigger{

       MODIFIED("test"), MOVED("test2"), DELETED("test3");
       String event= null;
       ReceivedEvent(String t) {
           event = t;
       }
      
       public String toString(){
           return event;
       }

   }
 
   public void test(){
          
          
       String t = ReceivedEvent.MODIFIED.toString();
       // er geht nicht in die if rein ???
       if(t.equals(new String("test"))){
           String ttt;
       }

   
  }
}

wieso geht er nicht in die if rein?
wie kann ich einen definierten Enum auf ein String vergleichen?
Danke
 

Bratkartoffel

gebratene Kartoffel
Premium-User
Hi,

compiled es bei dir überhaupt? Dein enum heisst "Trigger", dein Constructor allerdings "ReceivedEvent".
Bist du dir sicher, dass dich hier nicht der Compiler / Debugger aufs Glatteis schickt? Innerhalb deines ifs wird nur ein String (ohne Wert) definiert und nicht initialisert. Dein if selbst hat keine Seiteneffekte; Somit vermute ich, dass der Compiler dir das weg optimiert. Bau mal ein System.out.println() oder sowas da rein.

Zur Optimierung: Hier kannst du die compilte .class Datei mal durch einen Decompiler (z.B. JAD) laufen lassen und schauen was da rauskommt.

Grüsse,
BK
 

BLR

Erfahrenes Mitglied
sorry für die Verwirrung.
Das Problem habe ich mittlerweiler gelöst.
Ich musste eine toString(); innerhalb der von Enum-Dedfinition definieren, die einen privaten Feld String zurückgibt
Der Aufruf ist dann:
Java:
Enum.MYVALUE.toString()
 

Bratkartoffel

gebratene Kartoffel
Premium-User
Hi,

Enums vergleicht man normalerweise nicht über der toString()-Methode, sondern entweder direkt über das Object {MyEnum.A.equals(meinFeld)} oder über den ordinal(): MyEnumA.ordinal() == meinFeld.ordinal()

Grüsse,
BK