On 6/7/2021 5:51 AM, Remi Forax wrote:
Hi all,
the first part of the message is about javac error message that could be 
improved,
the second part is about the current spec being not very logical.

With this code

     Object o = null;
     var value = switch(o) {
           //case null -> 0;
           case Object __ -> 0;
           case null -> 0;
     };
     System.out.println(value);

The error message is
   PatternMatching101.java:70: error: this case label is dominated by a 
preceding case label
           case null -> 0;
           ^

The error message is wrong here, because it's 'case null' and you can put a 
case null where you want but below a total pattern, so the error mesage should 
reflect that.

But the case null *is* dominated by the total pattern, and therefore dead.

Here is an example that compiles showing that case null can be below a case 
String, which it dominates

     Object o = null;
     var value = switch(o) {
           case String s -> 0;
           case null -> 0;
           default -> 0;
     };

In this case, the String pattern is not total, so it does not dominate null.


Reply via email to