如何从Scala调用参数为List <class <?>>的Java方法

时间:2019-03-24 03:50:51

标签: java scala generics

我正在尝试调用 java 方法,该方法从 scala 中使用List<Class<?>>

编译失败,显示

type mismatch;
 found   : java.util.List[Class[T]] where type T <: Person.type
 required: java.util.List[Class[_]]

我尝试使用JavaConverters,但收到相同的错误。

Java方法:

void registerClasses(List<Class<?>> var1);

从Scala拨打电话:

def registerEntities() = registry.registerClasses(List(Person.getClass).asJava)

1 个答案:

答案 0 :(得分:3)

问题在于Person.getClass的推断类型不是您想要的类型。您需要指定期望的类型,这可以通过显式类型参数完成

registry.registerClasses(List[Class[_]](Person.getClass).asJava)

(我不明白为什么类型描述在这里不起作用

registerClasses(List(Person.getClass: Class[_]).asJava)

type mismatch;
 found   : java.util.List[Class[_$2]] where type _$2
 required: java.util.List[Class[_]]
Note: Class[_$2] <: Class[_], but Java-defined trait List is invariant in type E.
You may wish to investigate a wildcard type such as `_ <: Class[_]`. (SLS 3.2.10)

据我所知。)