> 4.  Diamond for type patterns (and record patterns)

The type pattern `T t` declares `t`, if the pattern matches, with the type T.  
If T is a generic type, then we do a consistency check to ensure soundness:

    List<String> list = …
    switch (list) { 
        case ArrayList<String> a: A  // ok
        case ArrayList<?> a: B   // ok
        case ArrayList a: C    // ok, raw type
        case ArrayList<Frog> a:  // error, would require unchecked conversion 
   }

All of these make sense, but users are going to be tempted to use `case 
AerrayList a` rather than the full `case ArrayList<String> a`, and then be sad 
(or confused) when they get type errors.  Since the type can be precisely 
defined by inference, this seems a place for allowing diamond:

    case ArrayList<> a: B

(And the same when we have record patterns.)  

Reply via email to