nz_*_*_21 0 reflection delegation kotlin
我试图了解反思如何与委派一起工作,并且提出了一个玩具示例。
class Foo(val m: MutableList<Any>) : MutableList<Any> by m{
}
fun fooAdd(f: Foo) {
val a = f::class.java.getMethod("add").invoke(f, 20);
println(a)
}
fun main(args: Array<String>) {
fooAdd(Foo(mutableListOf()))
}
Run Code Online (Sandbox Code Playgroud)
这给我一个错误:
Exception in thread "main" java.lang.NoSuchMethodException: Foo.add()
Run Code Online (Sandbox Code Playgroud)
我不知道我理解为什么它的发生,看到 add()被委派给Foo从MutableList如果我理解正确。
如何解决此错误?另外,是否有一个应该用于这种用例的库?
Class#getMethod 接受两个参数:
Class<?>es的vararg )。MutableList没有add没有参数的方法,所以您会得到java.lang.NoSuchMethodException。
您打算获得这样的方法:
clazz.java.getMethod("add", Any::class.java)
Run Code Online (Sandbox Code Playgroud)
完整清单:
fun main() {
val list = mutableListOf<Int>()
val clazz = MutableList::class
val method = clazz.java.getMethod("add", Any::class.java)
method.invoke(list, 10)
println(list)
}
Run Code Online (Sandbox Code Playgroud)
输出:
[10]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
152 次 |
| 最近记录: |