NutzCN Logo
问答 Kotlin中调用sql.string获取的值为Function0<java.lang.String>
发布于 2513天前 作者 ganchaoyang 2307 次浏览 复制 上一个帖子 下一个帖子
标签:

代码如下:

override fun getSubPath(tableName: String, cloName: String, value: String): String {
        val v = Strings.sNull(value)
        val sql = Sqls.create("select $cloName from $tableName where $cloName like '$v" + "____' order by $cloName desc")
        sql.setCallback(SqlCallback { _, rs, _ -> {
            var rsvalue:String = v + "0001"
            if (rs!=null && rs.next()) {
                rsvalue = rs.getString(1)
                val newvalue = NumberUtils.toInt(rsvalue.substring(rsvalue.length-4)) + 1
                rsvalue = rsvalue.substring(0, rsvalue.length-4) + DecimalFormat("0000").format(newvalue)
            }
            rsvalue
        } })
        dao().execute(sql)
        println(sql.string.toString())
        return sql.string
    }
17 回复

不是 sql.getString() 吗?

kotlin里面会自动把string()转成getString()

那sql.getString()正常吗

结果和string()一样

哦, 那就是 sql.getObject(String.class)

结果还是一样的

哦, 那问题就应该出在闭包里面了

但是我把setCallback里面最后的返回值改成了一个固定的字符串也不行。

sql.getResult() 然后打印一下类型看看

cn.xhbds.nutzkt.framework.base.BaseServiceImpl$getSubPath$1$1,打出来是这样的

rsvalue 改成 return rsvalue; 试试?

我试过,加完之后报错了,提示的是“return is not allow here”

不用闭包,改成写个类吧

闭包的方式不行有原因么?

不清楚kotlin是怎么处理的

好的,谢谢了

添加回复
请先登陆
回到顶部