我使用scala并将案例类定义为
case class caseClass(aString :String, bInt :Int, cClass : Class[_], dClass : Class[_], eClass : Class[_])
然后我有代码从类列表中获取一组M
classes.filter(
clazz => clazz.isInterface
).map(
klazz => (
klazz.getDeclaringClass,
klazz,
klazz.getDeclaringClass.getDeclaredClasses.filter(
klass => klass.getSimpleName.equals("PythonJ")
).head
)
).zipWithIndex.map { case ((service, iteratr, privte), port) => caseClass(
s.getName, port, service, iteratr, privte
)
}.toSet
但是当我尝试编译这段代码时,它会出错
constructor of type (T1, T2, T3) cannot be uniquely instantiated to expected
type Tuple3 [Class[?], Class[?], Class[?]]
--- because ---
undetermined type
).zipWithIndex.map { case ((service, iteratr, privte), port) => caseClass(
^
有人可以告诉我要做出正确的事情
答案 0 :(得分:1)
AurélienThieriot是对的,你需要协助编译器 - 但是在不同的地方:
classes.filter(
clazz => clazz.isInterface
).map(
klazz => (
klazz.getDeclaringClass,
klazz,
klazz.getDeclaringClass.getDeclaredClasses.filter(
klass => klass.getSimpleName.equals("PythonJ")
).head
): (Class[_],Class[_],Class[_]) // <--type spec
).zipWithIndex.map { case ((service, iteratr, privte), port) => caseClass(
service.getName, port, service, iteratr, privte
)
}.toSet
这将(在我的理解中)帮助将map
的结果的类型参数固定到存在类型中,这使得后续类型推断结果明确(即编译器不会被强制推断“{{ 1}} what ?“)。
答案 1 :(得分:0)
我敢打赌,编译器无法推断出类型。
您是否尝试指定了您期望的类型?类似的东西:
).zipWithIndex.map { case ((s: Class[_], i: Class[_], p: Class[_]), port) => Module(