// enumerations/SmartCasting.java
// (c)2021 MindView LLC: see Copyright.txt
// We make no guarantees that this code is fit for any purpose.
// Visit http://OnJava8.com for more book information.
// {NewFeature} Since JDK 16

public class SmartCasting {
  static void dumb(Object x) {
    if(x instanceof String) {
      String s = (String)x;
      if(s.length() > 0) {
        System.out.format(
          "%d %s%n", s.length(), s.toUpperCase());
      }
    }
  }
  static void smart(Object x) {
    if(x instanceof String s && s.length() > 0) {
      System.out.format(
        "%d %s%n", s.length(), s.toUpperCase());
    }
  }
  static void wrong(Object x) {
    // "Or" never works:
    // if(x instanceof String s || s.length() > 0) {}
    // error: cannot find symbol   ^
  }
  public static void main(String[] args) {
    dumb("dumb");
    smart("smart");
  }
}
/* Output:
4 DUMB
5 SMART
*/