Spring 为什么不应用转换?
我想在springSpring 为什么不应用转换?,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
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)
}
有人能解释为什么这个问题被解决了吗?对我来说,这似乎是一个完全合理的问题。有人能解释为什么这个问题被关闭了吗?对我来说,这似乎是一个完全合理的问题。