【发布时间】:2022-01-07 21:53:44
【问题描述】:
作为对方法参数的调查的一部分,我尝试了新的Pattern Matching for switch (Preview)。使用传统条件,完美运行:
Method firstMethod = BitSet.class.getDeclaredMethods()[0];
Parameter firstParameter = firstMethod.getParameters()[0];
if (firstParameter.getType() == Integer.class) {
System.out.println("Integer");
}
当我尝试重构它以使用 switch 语句时,它没有编译:
Method firstMethod = BitSet.class.getDeclaredMethods()[0];
Parameter firstParameter = firstMethod.getParameters()[0];
switch (firstParameter.getType()) {
case Integer.class: System.out.println("Integer");
case int.class: System.out.println("int");
default: System.out.println("other");
}
错误是:
error: incompatible types: Class<Integer> cannot be converted to Class<CAP#1>
case Integer.class: System.out.println("Integer");
^
where CAP#1 is a fresh type-variable:
CAP#1 extends Object from capture of ?
这是无法做到的事情,还是只是语法错误?
【问题讨论】:
-
这看起来不像是新语法,你可能想要
case Class<Integer> ci : System.out.println("Integer"); break;和int类似的东西/ -
它也不起作用
-
新的 switch 表达式按其类对对象进行分支。
firstParameter.getType()返回一个类对象(Class的实例),因此该类始终为Class。所以你不能在你的例子中分支。
标签: java switch-statement java-17 preview-feature