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

soo*_*per 5 java generics scala

我试图调用从scala中获取的java方法。List<Class<?>>

编译失败并显示

type mismatch;
 found   : java.util.List[Class[T]] where type T <: Person.type
 required: java.util.List[Class[_]]
Run Code Online (Sandbox Code Playgroud)

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

Java方法:

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

Run Code Online (Sandbox Code Playgroud)

从Scala致电:

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

Run Code Online (Sandbox Code Playgroud)

Ale*_*nov 3

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

registry.registerClasses(List[Class[_]](Person.getClass).asJava)
Run Code Online (Sandbox Code Playgroud)

(我不明白为什么类型归属在这里不起作用:

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)
Run Code Online (Sandbox Code Playgroud)

据我所知应该如此。)

  • 我无法让类型归属起作用,但似乎类型参数起作用,所以+1。 (2认同)