java - Scala 包装通用匿名类

标签 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)

最佳答案

调用execute时指定参数类型:

super.execute[T, SQLiteJob[T]](job)

关于java - Scala 包装通用匿名类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12923538/

相关文章:

java - 如何从文件加载AWS凭证?

java - Websphere 8.x 无法识别 WEB-INF/lib 中的 axis 1.4 jar

Actors 的 Scala 消息总线实现?

scala - Scala 中 AnyVal 类型(Int、Double 等)的 +=/*=/etc 运算符

c# - 如何捕获 lambda 表达式中外部变量的值?

java - 如何将cursor.getString数据用于getResources()?

java - 使用 spring data jpa 从数据库过滤和检索数据

bash - Shebang "#!"开始和 "!#"结束?

javascript - 防止 JavaScript 闭包继承作用域

javascript - 从js引擎的 Angular 看闭包和构造函数是如何工作的