在Java中,有一种动态加载执行的技术,叫反射。简单来说,就是在你程序运行的时候,再附加加载一些类去执行。要对一个类使用反射,必须先得到该类的字节码。
比如Person.class,person.getClass(),Class.forName("com.example.Person"),注意使用Class.forName的方式要try-catch一个ClassNotFoundException。
getDeclared开头的是获取该类中直接声明的属性或方法,不包括该类的父类,而没有Declared的是获取该类包括继承来的所有属性或方法。
field.set(obj, value) field.get(obj) obj为该类的一个对象
method.invoke(obj, params...) constructor.invoke(obj, params...)
private fun getGenericType(obj: Any): Class<*>? {
return if (obj.javaClass.genericSuperclass is ParameterizedType &&
(obj.javaClass.genericSuperclass as ParameterizedType).actualTypeArguments.isNotEmpty()) {
(obj.javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[0] as Class<*>
} else (obj.javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[0] as Class<*>
}
阅读量:641
点赞量:0
收藏量:0