パターンマッチング
CoddyのJavaジャーニー「ロジックとフロー」セクションの一部 — レッスン 37/59。
Javaのパターンマッチングを使用すると、オブジェクトが特定の型を持っているかどうかを判定し、そこからコンポーネントを抽出することができます。これにより、型チェックとキャスト操作が簡素化されます。
instanceof でパターンマッチングを使用する方法を見てみましょう:
Object obj = "Hello";
if (obj instanceof String str) {
// str は自動的に String にキャストされます
System.out.println(str.toUpperCase());
}上記のコードを実行すると、出力は次のようになります:
"HELLO"
パターンマッチングのチェックを else if で連鎖させることもできます:
Object value = 42;
String result;
if (value instanceof Integer i) {
result = "Number: " + i;
} else if (value instanceof String s) {
result = "Text: " + s;
} else {
result = "Unknown";
}上記のコードを実行した後、result は以下の内容を保持します:
“Number: 42”
チャレンジ
簡単1つの引数を受け取るprocessValueという名前のメソッドを作成してください:
- さまざまな型である可能性があるオブジェクト(
value)
このメソッドは、instanceofを使用したパターンマッチングを使用して値を処理し、以下のルールに基づいて文字列を返す必要があります:
- Integerの場合:
"Number: "に続いて値を2倍にしたものを返します - Stringの場合:
"Text: "に続いて値を大文字にしたものを返します - Booleanの場合:
"Boolean: "に続いて反対の値(trueはfalseになり、その逆も同様)を返します - その他の型の場合:
"Unknown"を返します
自分で試してみよう
import java.util.Scanner;
public class Main {
public static String processValue(Object value) {
// TODO: instanceof を使用したパターンマッチングで値を処理する
// Integer の場合: "Number: " + (value * 2) を返す
// String の場合: "Text: " + value.toUpperCase() を返す
// Boolean の場合: "Boolean: " + (!value) を返す
// その他の型の場合: "Unknown" を返す
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String type = scanner.nextLine();
String inputValue = scanner.nextLine();
Object value = switch(type) {
case "Integer" -> Integer.parseInt(inputValue);
case "String" -> inputValue;
case "Boolean" -> Boolean.parseBoolean(inputValue);
default -> inputValue;
};
System.out.println(processValue(value));
}
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。