Issues with pattern variables inside Enum

Francois Green francois.green at gmail.com
Tue Oct 5 23:04:17 UTC 2021


I don't know if it should, but this works:

public class PatNum {
    
    public static void main(String[] args) {

        enum Suit {
            Heart("♡"), Club("♣"), Spade("♠"), Diamond("♢");
        
            String symbol;
        
            Suit(String symbol) {
                this.symbol = symbol;
            }
        
            public String color() {
                return switch(this) {
                    case Club, Spade -> "Black";
                    case Diamond, Heart -> "Red";
                };
            }
        }

        for (var suit : Suit.values()) System.out.println(suit.color());
    }
}



Trying to use a pattern variable causes an error:

public class PatNum {
    
    public static void main(String[] args) {

        enum Suit {
            Heart("♡"), Club("♣"), Spade("♠"), Diamond("♢");
        
            String symbol;
        
            Suit(String symbol) {
                this.symbol = symbol;
            }
        
            public String color() {
                return switch(this) {
                    case Club c -> "Red";
                    case Spade s -> "Black";
                    case Diamond d -> "Red";
                    case Heart h -> "Red";
                };
            }
        }

        for (var suit : Suit.values()) System.out.println(suit.color());
    }
}

PatNum.java:16: error: cannot find symbol
                    case Club c -> "Red";
                         ^
  symbol:   class Club
  location: class Suit
PatNum.java:17: error: cannot find symbol
                    case Spade s -> "Black";
                         ^
  symbol:   class Spade
  location: class Suit
PatNum.java:18: error: cannot find symbol
                    case Diamond d -> "Red";
                         ^
  symbol:   class Diamond
  location: class Suit
PatNum.java:19: error: cannot find symbol
                    case Heart h -> "Red";
                         ^
  symbol:   class Heart
  location: class Suit
Note: PatNum.java uses preview features of Java SE 17.
Note: Recompile with -Xlint:preview for details.
4 errors
error: compilation failed







More information about the amber-dev mailing list