0

私はscalaクロージャを使用してこのコードをより良くしようとしています:

  SQLiteQueue queue = new SQLiteQueue(databaseFile);
  queue.start();    
  queue.execute(new SQLiteJob<Object>() {
    protected Object job(SQLiteConnection connection) throws SQLiteException {
      connection.exec(...);
      return null;
    }
  });

SQLiteQueueをサブクラス化し、execute関数にオーバーロードを追加しました。

def execute[T](action: SQLiteConnection => T) {
    val job = new SQLiteJob[T] {
        override def job(conn:SQLiteConnection):T = {
            action(conn)
        }
    }
    super.execute(job)
}

だから私はそれを次のように使うことができます:

queue.execute { conn => do something with conn}

しかし、私はこのコンパイラエラーをで受け取りますsuper.execute(job)

error: inferred type arguments [Nothing,com.almworks.sqlite4java.SQLiteJob[T]] 
do not conform to method execute's type parameter bounds [T,J <: 
com.almworks.sqlite4java.SQLiteJob[T]]

そこで呼び出している実行関数は次のようになります。public <T, J extends SQLiteJob<T>> J execute(J job)

4

1 に答える 1

3

executeを呼び出すときにタイプパラメータを指定します。

super.execute[T, SQLiteJob[T]](job)
于 2012-10-16T21:44:58.347 に答える