说明 参考内容: 1、反射机制,调用属性(静态非静态);2、反射机制,调用构造方法(静态非静态)。 gettersetter方法 定义一些方法来操作成员变量,每个方法都必须有一个有意义的名称,所以就有了gettersetter方法,gettersetter方法格式和写法都是固定的,所以只要有gettersetter方法就不用煞费心思的去想方法名称了,解决了起名字难问题。并且gettersetter方法还是程序员之间的一种规范,给属性赋值立刻就会想到gettersetter方法,降低了程序员之间的沟通成本。代码案例 工具类:importorg。apache。commons。lang3。StringUimportjava。lang。reflect。Mimportjava。util。LpublicclassReflectCallMethod{paramentryClassparammethodNameparamTreturnpublicstaticTTinvokeForStatic(ClassentryClass,StringmethodName){if(entryClassnull){}Ttry{反射获取MethodmethodentryClass。getDeclaredMethod(methodName);method。setAccessible(true);return(T)method。invoke(entryClass);}catch(Exceptione){e。printStackTrace();}}paramentryClassparammethodNameparamclassArgsparamvalueArgsparamTreturnpublicstaticTTinvokeForStatic(ClassentryClass,StringmethodName,Class〔〕classArgs,Object〔〕valueArgs){if(entryClassnull){}Ttry{MethodmethodentryClass。getDeclaredMethod(methodName,classArgs);method。setAccessible(true);return(T)method。invoke(entryClass,valueArgs);}catch(Exceptione){e。printStackTrace();}}paramentryClassparammethodNameparaminitArgsparamTreturnpublicstaticTTinvokeForStatic(ClassentryClass,StringmethodName,ListObjectinitArgs){if(entryClassnull){}Ttry{Class〔〕classArgsnewClass〔initArgs。size()〕;Object〔〕valueArgsnewObject〔initArgs。size()〕;for(inti0;iinitArgs。size();i){classArgs〔i〕initArgs。get(i)。getClass();valueArgs〔i〕initArgs。get(i);}MethodmethodentryClass。getDeclaredMethod(methodName,classArgs);method。setAccessible(true);return(T)method。invoke(entryClass,valueArgs);}catch(Exceptione){e。printStackTrace();}}paramentryObjectparammethodNameparamTreturnpublicstaticTTinvokeForInstance(ObjectentryObject,StringmethodName){if(entryObjectnull){}Ttry{反射获取MethodmethodentryObject。getClass()。getDeclaredMethod(methodName);method。setAccessible(true);return(T)method。invoke(entryObject);}catch(Exceptione){e。printStackTrace();}}paramentryObjectparammethodNameparamclassArgsparamvalueArgsparamTreturnpublicstaticTTinvokeForInstance(ObjectentryObject,StringmethodName,Class〔〕classArgs,Object〔〕valueArgs){if(entryObjectnull){}Ttry{MethodmethodentryObject。getClass()。getDeclaredMethod(methodName,classArgs);method。setAccessible(true);return(T)method。invoke(entryObject,valueArgs);}catch(Exceptione){e。printStackTrace();}}paramentryObjectparammethodNameparaminitArgsparamTreturnpublicstaticTTinvokeForInstance(ObjectentryObject,StringmethodName,ListObjectinitArgs){if(entryObjectnull){}Ttry{Class〔〕classArgsnewClass〔initArgs。size()〕;Object〔〕valueArgsnewObject〔initArgs。size()〕;for(inti0;iinitArgs。size();i){classArgs〔i〕initArgs。get(i)。getClass();valueArgs〔i〕initArgs。get(i);}MethodmethodentryObject。getClass()。getDeclaredMethod(methodName,classArgs);method。setAccessible(true);return(T)method。invoke(entryObject,valueArgs);}catch(Exceptione){e。printStackTrace();}}getterandsetterparamentryObjectparammethodNameparamEreturnpublicstaticEEgetInvoke(ObjectentryObject,StringmethodName){if(entryObjectnullStringUtils。isEmpty(methodName)){}try{MethodmethodentryObject。getClass()。getDeclaredMethod(methodName);method。setAccessible(true);ObjectreturnValuemethod。invoke(entryObject);return(E)returnV}catch(Exceptionex){ex。printStackTrace();}}paramentryObjectparamfieldNameparamEreturnpublicstaticEEgetInvokeByFieldName(ObjectentryObject,StringfieldName){if(entryObjectnullStringUtils。isEmpty(fieldName)){}try{StringmethodNamegetStringUtils。capitalize(fieldName);MethodmethodentryObject。getClass()。getDeclaredMethod(methodName);method。setAccessible(true);ObjectreturnValuemethod。invoke(entryObject);return(E)returnV}catch(Exceptionex){ex。printStackTrace();}}paramentryObjectparammethodNameparamEreturnpublicstaticEEsetInvoke(ObjectentryObject,StringmethodName,Objectobject){if(entryObjectnullStringUtils。isEmpty(methodName)){}try{MethodmethodentryObject。getClass()。getDeclaredMethod(methodName,object。getClass());method。setAccessible(true);ObjectreturnValuemethod。invoke(entryObject,object);return(E)returnV}catch(Exceptionex){ex。printStackTrace();}}paramentryObjectparamfieldNameparamEreturnpublicstaticEEsetInvokeByFieldName(ObjectentryObject,StringfieldName,Objectobject){if(entryObjectnullStringUtils。isEmpty(fieldName)){}try{StringmethodNamesetStringUtils。capitalize(fieldName);MethodmethodentryObject。getClass()。getDeclaredMethod(methodName,object。getClass());method。setAccessible(true);ObjectreturnValuemethod。invoke(entryObject,object);return(E)returnV}catch(Exceptionex){ex。printStackTrace();}}theend} 测试类:importlombok。AllArgsCimportlombok。Dimportlombok。NoArgsCimportjava。io。Simportjava。util。Dimportjava。util。HashMimportjava。util。MDataAllArgsConstructorNoArgsConstructorpublicclassUserimplementsSerializable,Cloneable{privateIprivateSprivateDatecreateT静态方法1publicstaticvoidtestCall1(){System。out。println(testCall。1);}静态方法2paramparamsMapreturnpublicstaticMapString,ObjecttestCall2(MapString,ObjectparamsMap){System。out。println(testCall。2,paramsMap);returnparamsM}静态方法paramparamsMapreturnpublicstaticMapString,ObjecttestCall3(HashMapString,ObjectparamsMap){System。out。println(testCall。3,paramsMap);returnparamsM}实例方法1publicvoidtestCall11(){System。out。println(testCall。11);}实例方法2paramparamsMapreturnpublicMapString,ObjecttestCall12(MapString,ObjectparamsMap){System。out。println(testCall。12,paramsMap);returnparamsM}实例方法3paramparamsMapreturnpublicMapString,ObjecttestCall13(HashMapString,ObjectparamsMap){System。out。println(testCall。13,paramsMap);returnparamsM}}importjava。util。Aimportjava。util。Dimportjava。util。HashMimportjava。util。MpublicclassReflectCallMethodDemo{publicstaticvoidmain(String〔〕args){静态方法调用1Objectresult1ReflectCallMethod。invokeForStatic(User。class,testCall1);System。out。println(result1isnull,result1);静态方法调用2MapString,ObjectparamsMap1newHashMap();paramsMap1。put(map,newObject());MapString,Objectresult2ReflectCallMethod。invokeForStatic(User。class,testCall2,newClass〔〕{Map。class},newObject〔〕{paramsMap1});System。out。println(result2ismap,result2);静态方法调用3MapString,Objectresult3ReflectCallMethod。invokeForStatic(User。class,testCall3,Arrays。asList(paramsMap1));System。out。println(result3ismap,result3);实例方法调用1UserusernewUser();Objectresult11ReflectCallMethod。invokeForInstance(user,testCall11);System。out。println(result11isnull,result11);实例方法调用2MapString,ObjectparamsMap21newHashMap();paramsMap1。put(map,newObject());MapString,Objectresult12ReflectCallMethod。invokeForInstance(user,testCall12,newClass〔〕{Map。class},newObject〔〕{paramsMap21});System。out。println(result12ismap,result2);实例方法调用3MapString,Objectresult13ReflectCallMethod。invokeForInstance(user,testCall13,Arrays。asList(paramsMap21));System。out。println(result13ismap,result13);setterandgetterUseruser2newUser(2,子贡,newDate());StringnameReflectCallMethod。getInvoke(user2,getName);System。out。println(methodnameget,name);Stringname2ReflectCallMethod。getInvokeByFieldName(user2,name);System。out。println(fieldnameget,name2);ReflectCallMethod。setInvoke(user2,setName,闵损);ReflectCallMethod。setInvokeByFieldName(user2,id,200);intidReflectCallMethod。getInvoke(user2,getId);System。out。println(methodnameget,id);Stringname3ReflectCallMethod。getInvokeByFieldName(user2,name);System。out。println(fieldnameget,name3);}}