对于 Scala 项目的单元测试,我正在编写我自己的简单javax.sql.DataSource
类,它基本上只是在幕后包装了一个java.sql.DriverManager
实例。
我只是简单地扩展javax.sql.DataSource
了 ,并且在大多数情况下让 Eclipse 为所需的方法/函数自动生成存根。
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)
}
}
但是,我遇到了unwrap
函数的编译问题......编译器告诉我它不会覆盖任何东西。
这是一个并排比较unwrap
......第一个用Java自动生成,第二个我自己翻译成Scala。谁能发现我做错了什么,以至于编译器不会将它们识别为等效的?
@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]
}