Scala包装通用匿名类

时间:2012-10-16 21:16:22

标签: java scala closures

我正在尝试使用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子类化,并为执行函数添加了一个重载:

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)

1 个答案:

答案 0 :(得分:3)

调用execute:

时指定类型参数
super.execute[T, SQLiteJob[T]](job)