升级Apache Commons Lang3后ImmutablePair出现类型推断问题
问题原因分析
这个问题的核心是Apache Commons Lang3 2.12.13版本对ImmutablePair的泛型类型推断逻辑做了调整,导致Kotlin编译器无法再通过后续代码上下文自动推导泛型参数类型。
具体来说:
- 在2.12.0版本中,Kotlin编译器可以利用
apply代码块里的className.invoke(this)调用,反向推断ImmutablePair的泛型参数T和U——因为invoke方法的参数类型会约束this(即ImmutablePair实例)的类型,编译器能顺着这个依赖关系补全泛型信息。 - 而2.12.13版本中,Commons Lang3团队可能优化了
ImmutablePair的泛型约束,或者修复了泛型相关的潜在问题,使得构造ImmutablePair时必须直接提供足够的类型信息,不再支持通过后续上下文回溯推断泛型参数。这就导致你的代码中ImmutablePair(it, action)没有显式指定泛型类型时,编译器无法确定T和U的具体类型,从而抛出“Not enough information to infer type variable T”的错误。
临时解决方案(无需回退版本)
如果不想回退版本,只需显式指定ImmutablePair的泛型类型即可,示例如下:
ImmutablePair<YourFirstType, YourSecondType>(it, action).apply { className.invoke(this) }
将YourFirstType和YourSecondType替换为it和action对应的实际类型即可。
内容的提问来源于stack exchange,提问作者myuh236
相关产品推荐
相关产品推荐

