Scala中获取声明为Any类型的输入变量的类型首字符
修复Scala类型首字符匹配函数的MatchError问题
你的代码触发MatchError,核心问题是类型字符串匹配逻辑错误:
- Double类型调用
getClass.toString会返回"class java.lang.Double",但你写的匹配项是"double",完全不匹配;Boolean同理,实际类字符串是"class java.lang.Boolean"而非"boolean"。 - 硬编码类名字符串的方式既容易出错,也不够直观。
直接用Scala的类型模式匹配可以彻底解决这个问题,同时让代码更健壮:
def getTypeChar(value: Any): Char = value match { case _: Int | _: java.lang.Integer => 'i' case _: String => 's' case _: Double | _: java.lang.Double => 'f' case _: Boolean | _: java.lang.Boolean => 'b' case _: List[_] => 'c' case _ => throw new IllegalArgumentException(s"不支持的类型: ${value.getClass}") }
关键改进点:
- 直接匹配类型而非类名字符串,彻底避免拼写错误或类型映射问题
- 同时覆盖Scala基本类型(如
Int)和对应的Java包装类(如java.lang.Integer),处理自动装箱场景 - 用
List[_]代替硬编码的scala.collection.immutable.$colon$colon,::是List的具体实现类,直接匹配List接口更通用 - 新增默认case,对未处理的类型抛出明确的异常,而非模糊的MatchError
内容的提问来源于stack exchange,提问作者Kiolimandars
相关产品推荐
相关产品推荐

