模式匹配
本课属于 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”
挑战
简单创建一个名为 processValue 的方法,它接受一个参数:
- 一个可能属于不同数据类型的对象(
value)
该方法应使用 instanceof 模式匹配来处理这个值,并根据以下规则返回一个字符串:
- 如果它是 Integer:返回 "Number: ",后面跟着加倍后的值
- 如果它是 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));
}
}这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: Java 在线编译器