我们可以使用 instance::class.java、ClassName::class.java 或者 instance.javaClass 通过 java.lang.Class 来进入 Java 的反射类java.lang.Class, 之后我们就可以使用Java中的反射的功能特性了。
代码示例:
@RunWith(JUnit4::class)
class RefectClassTest {
@Test fun testGetterSetter() {
val product = Product()
val pClz = product::class.java
println(pClz.canonicalName)
pClz.declaredFields.forEach { println(it) }
pClz.declaredMethods.forEach {
println(it.name);
it.parameters.forEach { println(it) }
}
}
}
运行上面的代码输出:
com.easy.kotlin.Product
java.lang.Long com.easy.kotlin.Product.id
java.lang.String com.easy.kotlin.Product.name
java.lang.String com.easy.kotlin.Product.category
java.util.Date com.easy.kotlin.Product.gmtCreated
java.util.Date com.easy.kotlin.Product.gmtModified
getName
setName
java.lang.String arg0
getId
setId
java.lang.Long arg0
setCategory
java.lang.String arg0
getGmtCreated
setGmtCreated
java.util.Date arg0
getGmtModified
setGmtModified
java.util.Date arg0
getCategory