2 votes

Comment passer un type brut en Scala ?

Comment puis-je passer un paramètre à une méthode Java dont la signature de la méthode contient un type brut ? Mon exemple d'API est le suivant :

class P<T> {}

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

Et ma tentative de l'appeler depuis Scala ressemble à ceci :

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

Ce qui génère l'erreur de compilation suivante :

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

Paramétrer p comme type P[Any] n'aide pas non plus. J'utilise la version 2.8 RC6.

Pour rappel, l'API qui m'a causé ce problème s'appelle org.teleal.cling.model.meta.LocalDevice Le constructeur semble prendre un argument paramétré 'deviceServices'. Cependant, le paramètre de type 'LocalService' également prend un paramètre, non fourni, ce qui donne une signature de méthode maladroite.

5voto

Randall Schulz Points 18820

Vous pouvez simplement rendre l'instanciation du tableau explicite (montré sous forme compilable) :

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)
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X