We struggled with this one - we call it the “Swiss cheese” problem. 

The current rules are cheese-friendly.  We considered trying to rule it out but 
we were concerned that the cure would be more complex than was worth it. 

Sent from my iPad

> On Nov 27, 2019, at 10:39 PM, Tagir Valeev <amae...@gmail.com> wrote:
> 
> Hello!
> 
> Consider the following code:
> 
> public class A {
>    private String str;
> 
>    public void f(Object obj) {
>        if (obj instanceof String str) {
>            System.out.println(str.toLowerCase()); // str refers to
> pattern binding
>        } else {
>            System.out.println(str.toLowerCase()); // str refers to the field
>        }
>    }
> }
> 
> I thought that such a code should be rejected by the compiler, as it's
> confusing and could be a source of very subtle bugs. However, I
> haven't found any explicit statement regarding this in the latest spec
> draft [1]. Could you please clarify whether such code is acceptable
> and point me to the relevant part of the spec draft. Thank you!
> 
> With best regards,
> Tagir Valeev.
> 
> [1] 
> http://cr.openjdk.java.net/~gbierman/jep305/jep305-20191021/specs/patterns-instanceof-jls.html

Reply via email to