Anzeige

String-Enum vergleichen.


BLR

Erfahrenes Mitglied
#1
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
#2
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
#4
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
#5
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
 
Anzeige
Anzeige