Pattern variable and field shadowing

Tagir Valeev amaembo at gmail.com
Thu Nov 28 03:39:30 UTC 2019


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


More information about the amber-spec-experts mailing list