繁体   English   中英

代理 object 调用抛出参数类型不匹配

[英]Proxy object invoke throws argument type mismatch

我使用代理调用另一个代理失败。 总是抛出参数类型不匹配异常。 有没有人可以帮忙?

这是代码。

// 1, use mybatis sqlSessionFactory create a Proxy object for MapperProxy.
@Suppress("UNCHECKED_CAST")
private fun <T> createMapper(sqlSessionFactory: SqlSessionFactory, clazz: Class<T>): T {
    return Proxy.newProxyInstance(
        clazz.classLoader,
        arrayOf(clazz),
        KtMapperProxy(
            sqlSessionFactory.configuration.getMapper(
                clazz,
                sqlSessionFactory.openSession()
            )
        )
    ) as T
}

// 2, this class is the Proxy class.
class KtMapperProxy<T>(private val mapper: T) : InvocationHandler {
    override fun invoke(proxy: Any, method: Method, args: Array<Any?>?): Any {
        return method.invoke(mapper, args)
    }
}

// 3, here is the UserMapper class method be called.
fun getById(@Param("id") id: Long): User

// 4, this is test.
@Test
fun `test mapper query`() {
    val userMapper = DataSourceHelper.getMapper(sqlSessionFactory, UserMapper::class.java)
    assertEquals(userMapper.getById(1L).username, "user_1")
}

我发现了问题。我应该在使用 vararg 参数调用方法时传播 args。所以,应该是 method.invoke(mapper, *args) 而不是 method.invoke(mapper, args)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM