1

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]
}
4

1 に答える 1

3

試す:

@throws(classOf[SQLException])
override def unwrap[T](iface: Class[T]) : T = {
  null.asInstanceOf[T]
}
于 2012-06-28T15:11:31.367 に答える