스칼라 프로젝트를 테스트하는 유닛의 경우, 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)
}
}
그러나, 나는 아무것도를 오버라이드 (override)하지 않는 것을 말해 컴파일러와 함께 ... 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]
}
의 차이는 분명하다. Java 버전에서 unwrap의 반환 유형은 iface 유형과 관련이 있지만 스칼라 버전에서는 unwrap의 반환 유형이 iface 유형과 아무 관련이 없습니다. – xiefei
고마워요! (그 두 번째 문장은 적어도) –