2009-06-15 13 views
9

Sto provando ad usare una libreria di classi Java dal codice Scala. (. JGraphT, per la precisione) uno dei costruttori che ho bisogno di chiamare èCome passare un oggetto di classe da Scala a Java?

public class SimpleGraph<V, E> 
    extends AbstractBaseGraph<V, E> 
    implements UndirectedGraph<V, E> 
{ 
    public SimpleGraph(Class<? extends E> edgeClass) {...} 
} 

Per chiamare questo da Java, direi:

UndirectedGraph<String, DefaultEdge> g = new SimpleGraph<String, DefaultEdge>(DefaultEdge.class); 

Qual è la corretta equivalente Scala?

In particolare, come posso passare l'argomento DefaultEdge.class al costruttore?

risposta

18

Il codice Scala equivalente è, come dici tu

val g: UndirectedGraph[String, DefaultEdge] = new SimpleGraph[String, DefaultEdge](classOf[DefaultEdge]) 

ma che può essiccate un po 'a causa della Scala può dedurre i parametri di tipo del vostro costruttore

val g: UndirectedGraph[String, DefaultEdge] = new SimpleGraph(classOf[DefaultEdge]) 

Ma non è così ASCIUTTO come può arrivare. Il tipo "DefaultEdge" viene citato due volte. Puoi ottenere anche più ASCIUTTO con i manifesti. Per prima cosa si crea una fabbrica per la creazione di SimpleGraphs.

object SimpleGraph { 
    import scala.reflect.Manifest 
    def apply[T, E]()(implicit mfst : Manifest[E]) = new SimpleGraph[T,E](mfst.erasure.asInstanceOf[Class[_ <: E]]) 
} 

E con questo siamo in grado di creare un grafico con uno

val g = SimpleGraph[String, DefaultEdge]() 

o

val g: UndirectedGraph[String, DefaultEdge] = SimpleGraph() 

Ovviamente questa tecnica è valsa la pena solo se si crea un gruppo di SimpleGraphs

Ora alcuni avvertimenti e avvertenze. I manifesti sono ancora considerati sperimentali. Sospetto che siano troppo utili per essere mai abbandonate, ma non ci sono garanzie. Per ulteriori informazioni sui manifesti vedi http://scala-blogs.org/2008/10/manifests-reified-types.html

7

Ho trovato la mia risposta. L'equivalente è

val g = new SimpleGraph[String, DefaultEdge](classOf[DefaultEdge]) 
Problemi correlati