public class DeconstructionInstanceOf20 { public interface Function { R apply(T t); } public interface UnaryOperator extends Function { } class ClassMapper implements UnaryOperator { private T in; private T out; ClassMapper(T in, T out) { this.in = in; this.out = out; } public T apply(T arg) { return in.equals(arg) ? out : null; } } record Mapper(T in, T out) implements UnaryOperator { public T apply(T arg) { return in.equals(arg) ? out : null; } } void test(UnaryOperator op, Object ob, Mapper mapperString) { //Example 18.5.5-1. Record Pattern Type Inference JLS with Record Patterns (Second Preview) if (op instanceof Mapper(var in, var out)) { boolean shorter = out.length() < in.length(); } if (mapperString instanceof Mapper(var in, var out)) { boolean shorter = out.length() < in.length(); } if (op instanceof Mapper(var in, var out)) { System.out.println(in.hashCode()); } if (op instanceof Mapper(var in, var out)) { System.out.println(in.hashCode()); } if (op instanceof Mapper(var in, var out)) { System.out.println(in.hashCode()); } if (op instanceof Mapper(var in, var out)) { System.out.println(in.hashCode()); } if (op instanceof Mapper m) { System.out.println(m); } if (op instanceof Mapper m) { System.out.println(m); } if (op instanceof ClassMapper m) { System.out.println(m); } //error if (op instanceof Mapper m) { System.out.println(m); } //error if (ob instanceof UnaryOperator objectUnaryOperator) { } //error if (ob instanceof UnaryOperator objectUnaryOperator) { } if (op instanceof Mapper objectUnaryOperator) { } } record Pair(T first, T1 second) {}; public static void notCheckcastConvertible(){ Object o = "Some string"; if (o instanceof Pair(Integer x, String y)) { System.out.println(x + " " + y); } else { System.out.println("notCheckcastConvertible default branch"); } }; public static void checkcastConvertible(){ Pair pair = new Pair<>(42, "hello"); Object o = pair; if (o instanceof Pair(Integer x, String y)) { System.out.println(x + " " + y); } else { System.out.println("notCheckcastConvertible default branch"); } }; }