Pour tester un projet Scala à l'unité, j'écris ma propre classe simple javax.sql.DataSource
qui enveloppe simplement une instance java.sql.DriverManager
sous les couvertures.Traduction de génériques Java vers Scala
J'ai simplement étendu javax.sql.DataSource
, et pour la plupart, laissez Eclipse générer automatiquement des stubs pour les méthodes/fonctions requises.
class H2DataSource extends javax.sql.DataSource {
import java.io.PrintWriter
import java.sql.DriverManager
var printWriter : PrintWriter
Class.forName("org.h2.Driver")
@throws(classOf[SQLException])
override def getLogWriter() : PrintWriter = {
printWriter
}
@throws(classOf[SQLException])
override def getLoginTimeout() : Int = {
// TODO Auto-generated method stub
0
}
@throws(classOf[SQLException])
override def setLogWriter(printWriter: PrintWriter) = {
this.printWriter = printWriter
}
@throws(classOf[SQLException])
override def setLoginTimeout(seconds: Int) = {
// TODO Auto-generated method stub
}
@throws(classOf[SQLException])
override def isWrapperFor(iface: Class[_]) : Boolean = {
// TODO Auto-generated method stub
false
}
@throws(classOf[SQLException])
override def unwrap[T](iface: java.lang.Class[_]) : T = {
// TODO Auto-generated method stub
null.asInstanceOf[T]
}
@throws(classOf[SQLException])
override def getConnection() : Connection = {
DriverManager.getConnection("jdbc:h2:myH2")
}
@throws(classOf[SQLException])
override def getConnection(user: String, password: String) : Connection = {
DriverManager.getConnection("jdbc:h2:myH2", user, password)
}
}
Cependant, je suis en cours d'exécution dans un problème de compilation avec la fonction unwrap
... avec le compilateur me disant qu'il ne l'emporte pas sur quoi que ce soit.
Voici une comparaison côte-à-côte de unwrap
... la première générée automatiquement en Java, et la seconde traduite en Scala par moi-même. Quelqu'un peut-il repérer ce que je fais mal, de sorte que le compilateur ne les reconnaîtrait pas comme équivalents?
@Overrride
public <T> T unwrap(Class<T> iface) throws SQLException {
return null;
}
...
@throws(classOf[SQLException])
override def unwrap[T](iface: java.lang.Class[_]) : T = {
null.asInstanceOf[T]
}
La différence est évidente. En version java le type de retour de unwrap est lié au type d'iface mais votre version de scala le type de retour de unwrap n'a rien à voir avec le type d'iface. – xiefei
Merci! (pour cette deuxième phrase, au moins) –