Scala中使用Java单类型参数泛型类时抛出类型参数数量错误
问题排查与解决
先来看下你遇到的核心问题:Java中正常使用的单泛型参数RequestWrapper类,在Scala中被编译器要求传入2个类型参数,报错如下:
wrong number of type arguments for com.wipro.nepc.coe.requestWrapper.RequestWrapper, should be 2
根源分析
这个问题的本质是Scala代码没有显式导入你自定义的Java泛型类,导致编译器“张冠李戴”——它找到了另一个同名的RequestWrapper类(大概率来自Scala标准库或项目依赖),而那个类恰好定义了2个类型参数,因此抛出参数数量不匹配的错误。
你在Java中能正常使用,是因为Java编译器会优先检索你显式导入的包或当前包下的类,不会随便匹配其他同名类;但Scala有自己的默认导入列表,当类名冲突且未显式指定时,就会出现这种误匹配。
解决方案
只需要在Scala代码中显式导入你的自定义RequestWrapper类即可,修改后的代码如下:
// 必须加上这行,明确指定要使用的是你自己定义的RequestWrapper import com.wipro.nepc.coe.requestWrapper.RequestWrapper import java.util.HashMap var testMap = new HashMap[String, Object] var obj = new Integer(1) testMap.put("one", obj) var ownerIp: String = "10.145.59.107" var requestWrap = new RequestWrapper[HashMap[String, Object]](testMap, ownerIp)
补充验证
为了确认是类名冲突导致的问题,你也可以在Scala中直接使用全路径类名来创建对象,这样也能绕过导入问题:
var requestWrap = new com.wipro.nepc.coe.requestWrapper.RequestWrapper[HashMap[String, Object]](testMap, ownerIp)
内容的提问来源于stack exchange,提问作者Pravin Kumar
相关产品推荐
相关产品推荐

