如果在此特定情况下,为什么模式匹配实例不能与其他模式匹配一起使用?
2022-09-01 16:05:53
以下代码片段无法在 javac 版本 17 (Temurin) 上编译
class Instanceof {
static void doesNotWork(Object o) {
if (o == null) {
throw new Error();
} else if (!(o instanceof String s)) {
throw new Error();
}
System.out.println(s); // error here
}
}
它生成此错误: 找不到符号
cannot find symbol
symbol: variable s
location: class Instanceof
但是,以下(在我看来)等效变体有效:使用显式 else 块:
static void doesWork(Object o) {
if (o == null) {
throw new Error();
} else if (!(o instanceof String s)) {
throw new Error();
} else {
System.out.println(s);
}
}
或者没有别的:
static void doesWork(Object o) {
if (o == null) {
throw new Error();
}
if (!(o instanceof String s)) {
throw new Error();
}
System.out.println(s);
}
或者使用单个,如果:
static void doesWork(Object o) {
if (o == null || !(o instanceof String s)) {
throw new Error();
}
System.out.println(s);
}
这是javac中的一个错误吗?如果是,我应该报告此事,但究竟在哪里?