Ich habe eine Scala-Klasse, die versucht, eine Java-Schnittstelle zu implementieren (EntityManager in JavaEE 7 für Komponententests, um spezifisch zu sein). Die Schnittstelle hat diese beiden Methoden (ua):Wie implementiert man Java-Schnittstelle in Scala mit mehreren Variablen-Parameter-Methoden (Typ Eraser Problem)?
public StoredProcedureQuery createStoredProcedureQuery(String procedureName, Class... resultClasses);
public StoredProcedureQuery createStoredProcedureQuery(String procedureName, String... resultSetMappings);
In der Scala Implementierung ich habe:
override def createStoredProcedureQuery(procedureName: String, resultClasses: Class[_]*): StoredProcedureQuery = ???
override def createStoredProcedureQuery(procedureName: String, resultSetMappings: String*): StoredProcedureQuery = ???
Allerdings habe ich die folgende Fehlermeldung erhalten:
MyTest.scala:134: error: double definition:
method createStoredProcedureQuery:(procedureName: String, resultSetMappings: String*)javax.persistence.StoredProcedureQuery and
method createStoredProcedureQuery:(procedureName: String, resultClasses: Class[_]*)javax.persistence.StoredProcedureQuery at line 133
have same type after erasure: (procedureName: String, resultSetMappings: Seq)javax.persistence.StoredProcedureQuery
override def createStoredProcedureQuery(procedureName: String, resultSetMappings: String*): StoredProcedureQuery = ???
Ich habe nicht war in der Lage, mit einer Arbeit zu kommen. Meine Google-Suchanfragen konnten nicht gefunden und beantwortet werden. Ich benutze Scala 2.10.4.
Danke. Das hat funktioniert. Bedeutet dies, dass es ein "Loch" in der Sprache gibt? Wenn Scala mit Java verbunden werden soll, scheint es, dass es Java-Varargs (zusätzlich zu den besseren Scalarargs) unterstützen sollte. – Integrator
Das Problem ist nicht mit Varargs per se, sondern die Interaktion zwischen Varargs und Methodenüberladung. Java hat komplizierte Regeln, die auf dem Compiler fest codiert sind, um die Mehrdeutigkeiten aufzulösen. Mein Verständnis ist, dass die Scala-Designer entschieden haben, dass sie bessere Dinge zu tun haben, als diese Regeln im Scala-Compiler neu zu implementieren ... Also, Scala hat einige Teile, die nicht mit Java kompatibel sind und wir müssen immer noch auf Java zurückgreifen, um zu funktionieren um diese Einschränkungen herum. – Jelmo