Как передать сырой тип в Scala? - PullRequest
2 голосов
/ 26 июня 2010

Как я могу передать параметр в метод Java с необработанным типом в сигнатуре метода? Мой пример API выглядит следующим образом:

class P<T> {}

class Q {
    public void f(P p[]) {}
}

И моя попытка позвонить из Скалы выглядит так:

val q = new Q()
val p = new P()
val p_array = Array(p)
q.f(p_array)

, которая генерирует следующую ошибку компилятора:

type mismatch;
found   : Array[P[Nothing]]
required: Array[P[_]]
q.f(p_array)

Параметрирование p как типа P [Any] также не помогает. Я использую 2.8 RC6.

Кстати, API, вызвавший у меня эту проблему, называется org.teleal.cling.model.meta.LocalDevice Конструктор выглядит так, как будто он принимает параметризованный аргумент 'deviceServices'. Однако параметр типа 'LocalService' также принимает параметр, не предоставленный, что приводит к неуклюжей сигнатуре метода.

1 Ответ

5 голосов
/ 27 июня 2010

Вы можете просто сделать создание экземпляра массива явным (показано в компилируемой форме):

object PQ {
    def
    main(args: Array[String]): Unit = {
        val q = new Q()
        val p = new P()
        val p_array = Array[P[_]](p)
        q.f(p_array)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...