[patterns] Unchecked cast warning is absent?

Tagir Valeev amaembo at gmail.com
Tue Oct 3 04:28:04 UTC 2017


It's even more interesting that method type parameter is allowed in __matches:

  static <T> void matches(Object obj) {
    if(obj __matches T t) {
      System.out.println("Matches!");
    }
  }

Bytecode shows that "instanceof Object" is generated which is pretty
useless. I think, such construct should be disabled and result in
compilation error (similarly to instanceof).

With best regards,
Tagir Valeev.

On Mon, Oct 2, 2017 at 4:45 PM, Tagir Valeev <amaembo at gmail.com> wrote:
> Hello!
>
> Just tried to play with pattern matching implementation. Seems that
> the matching against a non-reifiable type is unsafe, which is
> expected. Should the warning be displayed in this case?
>
> E.g.:
>
> import java.util.*;
>
> public class ListTest {
>
>   static void matches(Object obj) {
>     if(obj __matches List<String> list) {
>       System.out.println(list.get(0));
>     }
>   }
>
>   public static void main(String[] args) {
>     matches(Collections.singletonList(1));
>   }
> }
>
> $ ~/j/bin/javac -Xlint:all ListTest.java
> (compilation successful, no warning)
> $ ~/j/bin/java ListTest
> Exception in thread "main" java.lang.ClassCastException:
> java.base/java.lang.Integer cannot be cast to
> java.base/java.lang.String
> at ListTest.matches(ListTest.java:7)
> at ListTest.main(ListTest.java:12)
>
> With best regards,
> Tagir Valeev.


More information about the amber-dev mailing list