Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 为什么不应用转换?_Spring_Scala_Implicit Conversion_Jdbctemplate - Fatal编程技术网

Spring 为什么不应用转换?

Spring 为什么不应用转换?,spring,scala,implicit-conversion,jdbctemplate,Spring,Scala,Implicit Conversion,Jdbctemplate,我想在springJdbcTemplate中使用scala的隐式转换 JdbcTemplate有以下两种方法: jdbcTemplate.update(String sql, Object... params) // (1) jdbcTemplate.update(String sql, PreparedStatementSetter pss) // (2) PreparedStatementSetter只是一个接口,我只想将函数值传递给JdbcTempla

我想在spring
JdbcTemplate
中使用scala的隐式转换

JdbcTemplate
有以下两种方法:

jdbcTemplate.update(String sql, Object... params)               // (1)

jdbcTemplate.update(String sql, PreparedStatementSetter pss)    // (2)
PreparedStatementSetter
只是一个接口,我只想将函数值传递给
JdbcTemplate
。这意味着我想把它改成

更新(sql:String,setter:PreparedStatement=>Unit)/(3)

我所做的是创建
RichJdbcTemplate
,作为
JdbcTemplate
的包装:

class RichJdbcTemplate(jdbcTemplate: JdbcTemplate) {

  def update(sql: String, setter: PreparedStatement => Unit) {
    jdbcTemplate.update(sql, new PreparedStatementSetter() {
      def setValues(ps: PreparedStatement) {
        setter(ps)
      }
    })
  }
}
我希望每次调用
jdbcTemplate.update(sql,setter:PreparedStatement=>Unit)

jdbcTemplate
RichJdbcTemplate
之间会有一个隐式转换。但实际上它在这里不做隐式转换。因为这里的方法符合
jdbcTemplate.update(stringsql,Object…params)
的签名。这就是为什么这里没有隐式转换。有没有其他解决方案可以做到这一点?谢谢。

给你的方法起一个不同的名字;称它为
updateWithFunction
或其他什么

正如您所提到的,问题在于Scala不寻找隐式转换,因为它直接在
JdbcTemplate
上找到具有正确名称和正确参数类型的方法。解决方法是使用在
JdbcTemplate
上找不到的名称


您也可以显式地进行包装,
newrichjdbctemplate(jdbcTemplate).update(…)
,但这更难看。

只需给您的方法起一个不同的名称;称它为
updateWithFunction
或其他什么

正如您所提到的,问题在于Scala不寻找隐式转换,因为它直接在
JdbcTemplate
上找到具有正确名称和正确参数类型的方法。解决方法是使用在
JdbcTemplate
上找不到的名称


您也可以显式地进行包装,
newrichjdbctemplate(jdbcTemplate).update(…)
,但这更难看。

将更新方法重命名为其他方法。在对象中定义隐式转换并导入范围:

object MyImplConversions {
  implicit def toRichJdbcTemplate(jdbcTemplate: JdbcTemplate) =
    new RichJdbcTemplate(jdbcTemplate)
}

将更新方法重命名为其他方法。在对象中定义隐式转换并导入范围:

object MyImplConversions {
  implicit def toRichJdbcTemplate(jdbcTemplate: JdbcTemplate) =
    new RichJdbcTemplate(jdbcTemplate)
}

有人能解释为什么这个问题被解决了吗?对我来说,这似乎是一个完全合理的问题。有人能解释为什么这个问题被关闭了吗?对我来说,这似乎是一个完全合理的问题。