11package com.haoge.sample.easyandroid.activities
22
3+ import android.annotation.SuppressLint
34import android.os.Bundle
45import butterknife.OnClick
6+ import com.haoge.easyandroid.easy.EasyLog
57import com.haoge.easyandroid.easy.EasyReflect
8+ import com.haoge.easyandroid.easyFormat
69import com.haoge.sample.easyandroid.BaseActivity
710import com.haoge.sample.easyandroid.R
811
912/* *
1013 * @author haoge on 2018/5/22
1114 */
15+ @SuppressLint(" SetTextI18n" )
1216class EasyReflectActivity :BaseActivity () {
1317
18+ val log = EasyLog .DEFAULT
19+
1420 override fun onCreate (savedInstanceState : Bundle ? ) {
1521 super .onCreate(savedInstanceState)
1622 setContentView(R .layout.activity_reflect)
1723 }
1824
19- @OnClick(R .id.createTypes)
20- fun createTypes () {
21- println (" 第一种:只通过对应的class进行创建。" )
22- println (EasyReflect .create(Test ::class .java))
23- println (" 第二种:通过具体的实例进行创建。" )
24- println (EasyReflect .create(Test ()))
25- println (" 第三种:通过完整类名进行创建" )
26- println (EasyReflect .create(" com.haoge.sample.easyandroid.activities.Test" ))
27- println (" 第四种:先通过对应class创建后再进行实例化" )
28- println (EasyReflect .create(Test ::class .java).instance(" 构造函数第一个参数" ))
25+ @OnClick(R .id.createWithInstance)
26+ fun createWithInstance () {
27+ val reflect = EasyReflect .create(Test ())
28+ log.d(" 直接使用具体实例进行创建:\n $reflect " )
2929 }
3030
31- @OnClick(R .id.fieldReflect)
32- fun fieldReflect () {
33- val reflect = EasyReflect .create(Test ())
31+ @OnClick(R .id.createWithClass)
32+ fun createWithClass () {
33+ val reflect = EasyReflect .create(Test ::class .java)
34+ log.d(" 只使用class进行创建:\n $reflect " )
35+ }
36+
37+ @OnClick(R .id.createWithClassName)
38+ fun createWithClassName () {
39+ val reflect = EasyReflect .create(" com.haoge.sample.easyandroid.activities.Test" )
40+ log.d(" 只使用class类全名进行创建:\n $reflect " )
41+ }
42+
43+ @OnClick(R .id.createByConstructor)
44+ fun createByConstructor () {
45+ val reflect = EasyReflect .create(Test ::class .java).instance(" 自定义参数" )
46+ log.d(" 使用class与构造参数进行创建:\n $reflect " )
47+ }
3448
35- println (" 直接使用EasyReflect进行数据操作" )
36- println (reflect.setField(" name" , " 直接通过EasyReflect进行重置" ))
49+ @OnClick(R .id.getInstanceValue)
50+ fun getInstanceValue () {
51+ val reflect = EasyReflect .create(Test ::class .java).instance(" 构造函数" )
52+ log.d(" 获取创建出来的实例:${reflect.get<Test >()} " )
53+ }
3754
38- println (" 直接使用EasyReflect获取变量数据" )
39- println (" 获取的变量数据为:${reflect.getFieldValue<String >(" name" )} " )
55+ @OnClick(R .id.getFieldValueByNameWithReflect)
56+ fun getFieldValueByNameWithReflect () {
57+ val reflect = EasyReflect .create(Test ::class .java)
58+ log.e(" 通过创建出的reflect:\n $reflect \n 获取到字段name的值为:${reflect.getFieldValue<String >(" name" )} " )
59+ }
4060
41- val field = reflect.getField(" name" )
42- println (" name字段类型是:${field.field.type} " )
43- println (" name字段值是:${field.getValue<String >()} " )
44- field.setValue(" 重置名字" )
45- println (" 重置后的字段值是:${field.getValue<String >()} " )
61+ @OnClick(R .id.setFieldValueByNameWithReflect)
62+ fun setFieldValueByNameWithReflect () {
63+ val reflect = EasyReflect .create(Test ::class .java)
64+ log.e(" 字段被设置之前的reflect: \n $reflect " )
65+ reflect.setField(" name" , " 故意设置的" )
66+ log.e(" 字段被设置之后的reflect: \n $reflect " )
67+ }
4668
47- println (" 测试无具体实例时。调用静态变量" )
48- println (" 静态变量值为:${EasyReflect .create(Test ::class .java).getFieldValue<String >(" staticValue" )} " )
69+ @OnClick(R .id.callMethodWithReflect)
70+ fun callMethodWithReflect () {
71+ val reflect = EasyReflect .create(Test ())
72+ reflect.call(" invoked" , " invoke param" )
4973 }
5074
51- @OnClick(R .id.methodReflect )
52- fun methodReflect () {
75+ @OnClick(R .id.callMethodWithReturnReflect )
76+ fun callMethodWithReturnReflect () {
5377 val reflect = EasyReflect .create(Test ())
54- println (" 使用EasyReflect执行方法:" )
55- reflect.call(" toString" )
56- println (" 使用EasyReflect执行方法并获取返回数据" )
57- println (reflect.callWithReturn(" toString" ))
58- val method = reflect.getMethod(" toString" )
59- println (" 使用MethodReflect执行方法" )
60- method.call()
61- println (" 使用MethodReflect执行方法并获取返回数据" )
62- println (method.callWithReturn())
63-
64- println (" 测试无具体实例时。调用静态方法" )
65- EasyReflect .create(Test ::class .java).call(" print" , " 这是传入参数" )
78+ log.d(" 调用方法前的reflect: \n $reflect " )
79+ val newReflect = reflect.callWithReturn(" invoked" , " invoke" )
80+ log.d(" 调用方法之后的reflect: \n $newReflect " )
81+ }
82+
83+ @OnClick(R .id.getFieldsWithReflect)
84+ fun getFieldsWithReflect () {
85+ val reflect = EasyReflect .create(Test ::class .java)
86+ log.d(" Test类所有字段:\n ${reflect.getFields().easyFormat()} " )
87+ }
88+
89+ @OnClick(R .id.getMethodsWithReflect)
90+ fun getMethodsWithReflect () {
91+ val reflect = EasyReflect .create(Test ::class .java)
92+ log.d(" Test类所有方法:\n ${reflect.getMethods().easyFormat()} " )
93+ }
94+
95+ @OnClick(R .id.getConstructorsWithReflect)
96+ fun getConstructorsWithReflect () {
97+ val reflect = EasyReflect .create(Test ::class .java)
98+ log.d(" Test类所有构造函数:\n ${reflect.getConstructors().easyFormat()} " )
99+ }
100+
101+ @OnClick(R .id.callStaticMethod)
102+ fun callStaticMethod () {
103+ val reflect = EasyReflect .create(Test ::class .java)
104+ reflect.call(" print" , " 自定义参数" )
105+ }
106+
107+ @OnClick(R .id.getStaticField)
108+ fun getStaticField () {
109+ val reflect = EasyReflect .create(Test ::class .java)
110+ val field = reflect.getField(" staticValue" )
111+ log.d(" 获取到的字段为:\n ${field.easyFormat()} \n 值为:${field.getValue<String >()} " )
66112 }
67113}
68114
69- class Test (val name : String ){
115+ // 用于进行测试的类
116+ class Test private constructor(private val name : String ){
70117 constructor (): this (" 默认名字" )
71118
72119 override fun toString (): String {
73- println (" toString方法被调用" )
74120 return " Test(name='$name ')"
75121 }
76122
123+ fun invoked (name : String ){
124+ EasyLog .DEFAULT .e(" Test的invoked方法被执行。参数为$name " )
125+ }
126+
77127 companion object {
78128 @JvmStatic
79- fun print (message : String ) {
80- println (" 静态方法被调用,传入参数:$message " )
129+ private fun print (message : String ) {
130+ EasyLog . DEFAULT .e (" 静态方法被调用,传入参数:$message " )
81131 }
82132
83- var staticValue = " 静态文本"
133+ @JvmStatic
134+ private var staticValue = " 静态文本"
84135 }
85136
86- }
137+ }
138+
139+ data class A (var b : B ? )
140+
141+ data class B (var a : A ? )
0 commit comments