Android Kotlin 反射使用笔记

前言

java反射的写法,做下笔记

class MyClass {
    private var name = "xiao"
    private var age = 18

    private fun getRandom(): Int{
        return Random.nextInt(0,10)
    }
}

反射用法

 try {
            ////完整类名
            val cls = Class.forName("com.example.rbq.MyClass")
            //获取公开构造方法
            val publicConstructors = cls.constructors
            //获取全部构造方法
            val declaredConstructors = cls.declaredConstructors
            // 获取指定的构造方法
            val targetConstructor = cls.getDeclaredConstructor(Int::class.java)
            //获取公开方法
            val publicMethods = cls.methods
            //获取全部方法
            val declaredMethods = cls.declaredMethods
            //获取公开属性
            val publicFields = cls.fields
            //获取全部属性
            val declaredFields = cls.declaredFields
            //获得实例
            val myClass = cls.newInstance()
            //获取注解
            val annotation = cls.annotations
            //获取所有注解
            val declaredAnnotations = cls.declaredAnnotations
            // 获取类的加载器
            val classLoader = cls.classLoader
            //获取方法的返回类型
            val returnType= publicMethods[0].returnType
            //获取方法的传入参数类型
            val paramType = publicMethods[0].parameterTypes
            //是否一个注解类
            val isAnnotation = cls.isAnnotation
            //获取这个类的父类
            val superCls = cls.superclass
            // 获取这个类实现的所有接口(不包含泛型信息)
            val interfaces1 = cls.interfaces
            // 获取这个类实现的所有接口(包含泛型信息)
            val interfaces2 = cls.genericInterfaces

            //获得私有方法
            val getRandom = cls.getDeclaredMethod("getRandom")
            //调用方法前,设置访问标志
            getRandom.isAccessible = true
            val num = getRandom.invoke(myClass) as Int
            println("s:$num")

        } catch (e: ClassNotFoundException) {
            e.printStackTrace();
        } catch (e: IllegalAccessException) {
            e.printStackTrace();
        } catch (e: InstantiationException) {
            e.printStackTrace();
        } catch (e: NoSuchMethodException) {
            e.printStackTrace();
        } catch (e: InvocationTargetException) {
            e.printStackTrace();
        }

你可能感兴趣的:(Android Kotlin 反射使用笔记)