否定した条件の後でパターン変数を使う
出力はどれか。
public class Main {
static void print(Object o) {
if (!(o instanceof String s)) {
System.out.print("not string ");
return;
}
System.out.print(s.length() + " ");
}
public static void main(String[] args) {
print("hello");
print(10);
}
}
- A
5 not string - B
not string 5 - C コンパイルエラーになる
- D 実行時に例外が発生する
正解と解説を見る
正解: A
- A: "hello" は String なので長さ 5、10 は String ではないので "not string" で、呼んだ順に出力されます。
- B: 先に呼ぶのは print("hello") なので、5 が先に出力されます。
- C: 否定した instanceof の後で return するので、if の後ろでは s を使えます。
- D: 正しいコードなので例外にはなりません。
ポイント
!(o instanceof String s)のときに return するので、if の後ろでは o は必ず String です。そのため if の後ろで s を使えます。