Java 21字符类型switch模式匹配case when报错求助
解决Java switch模式匹配中char与Character类型不匹配的错误
你遇到的问题核心是switch表达式的类型是基本类型char,但case分支里用了包装类型Character的模式匹配,Java的模式匹配对基本类型和对应的包装类型做了严格区分,所以会提示类型不匹配。
下面给两种可行的修复方案:
方案1:使用char类型的模式匹配
直接把case里的Character改成char,和switch表达式的类型保持一致,代码如下:
for (var c : "foobar".toCharArray()) { switch(c) { case char cc when Character.isLetterOrDigit(cc) -> {} } }
Java 16及以上版本支持基本类型的模式匹配,这样修改后类型完全匹配,错误会消失。
方案2:将switch表达式转为包装类型
把循环中的char转成Character包装类,再进行switch匹配,代码如下:
for (var c : "foobar".toCharArray()) { switch(Character.valueOf(c)) { case Character cc when Character.isLetterOrDigit(cc) -> {} } }
这种方式让switch表达式和case模式的类型统一为Character,也能解决类型不匹配的问题。
需要注意的是,Java模式匹配中基本类型和包装类型不能直接跨类型匹配,必须保证switch表达式的类型和case模式的类型一致。
内容的提问来源于stack exchange,提问作者lost.sof
相关产品推荐
相关产品推荐

