Как вызвать Java-метод, принимающий параметр в виде List <Class <? >> из Scala - PullRequest
5 голосов
/ 24 марта 2019

Я пытаюсь вызвать java метод, который берет List<Class<?>> из scala .

Сбой компиляции с

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 Ответ

3 голосов
/ 24 марта 2019

Проблема в том, что выведенный тип для 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)

Насколько я могу сказать, это должно быть.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...