Finalizing in JDK 16 - Pattern matching for instanceof
Guy Steele
guy.steele at oracle.com
Wed Aug 26 19:26:05 UTC 2020
> On Aug 26, 2020, at 2:46 PM, Brian Goetz <brian.goetz at oracle.com> wrote:
>
>
>>>
>>> Proposed: An `instanceof` expression must be able to evaluate to both true and false, otherwise it is invalid. This rules out strongly total patterns on the RHS. If you have a strongly total pattern, use pattern assignment instead.
>>
>> Makes sense to me, but one question: would this restriction "must be able to evaluate to both true and false” be applied to _every_ `instanceof` expression, or only those that have a pattern to right of the `instanceof` keyword? I ask because if it is applied to _every_ `instanceof` expression, this would represent an incompatible change to the behavior of `x instanceof Object`, among others. Is it indeed the intent to make an incompatible change to the language?
>
> Well, it's more of an aspiration than a rule -- based on what we already do. We already use some form of this to rule out bad casts:
>
> String s = ...
> if (s instanceof Integer) { ... }
> // Error, incompatible types
>
> So here, we have a candidate instanceof that would always be false, which the compiler can derive by type analysis, and was always rejected. It would be joined by
>
> if (s instanceof Object o) { ... }
>
> because Object o is total in this case, but not
>
> if (s instanceof Object)
>
> because this _can_ yield either true (if s is not null) or false (if it is.)
Thank you: I had missed this point about null. Duh.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.java.net/pipermail/amber-spec-experts/attachments/20200826/75078d91/attachment.htm>
More information about the amber-spec-experts
mailing list