{"id":149,"date":"2020-07-04T14:11:20","date_gmt":"2020-07-04T06:11:20","guid":{"rendered":"https:\/\/22pig.com\/?p=149"},"modified":"2020-07-04T14:11:20","modified_gmt":"2020-07-04T06:11:20","slug":"javareflections","status":"publish","type":"post","link":"http:\/\/22pig.com\/?p=149","title":{"rendered":"[java]Reflections \u53cd\u5c04\u5de5\u5177\u7c7b"},"content":{"rendered":"<p>package com.22pig.util;<\/p>\n<p>import java.lang.reflect.Field;<br \/>\nimport java.lang.reflect.InvocationTargetException;<br \/>\nimport java.lang.reflect.Method;<br \/>\nimport java.lang.reflect.Modifier;<br \/>\nimport java.lang.reflect.ParameterizedType;<br \/>\nimport java.lang.reflect.Type;<\/p>\n<p>import org.apache.commons.lang3.StringUtils;<br \/>\nimport org.apache.commons.lang3.Validate;<br \/>\nimport org.slf4j.Logger;<br \/>\nimport org.slf4j.LoggerFactory;<\/p>\n<p>\/**<br \/>\n* ClassName: Reflections<br \/>\n* @Description: \u53cd\u5c04\u5de5\u5177\u7c7b.\u63d0\u4f9b\u8c03\u7528getter\/setter\u65b9\u6cd5, \u8bbf\u95ee\u79c1\u6709\u53d8\u91cf, \u8c03\u7528\u79c1\u6709\u65b9\u6cd5, \u83b7\u53d6\u6cdb\u578b\u7c7b\u578bClass,\u88abAOP\u8fc7\u7684\u771f\u5b9e\u7c7b\u7b49\u5de5\u5177\u51fd\u6570.<br \/>\n* @author<br \/>\n* @date 2015\u5e749\u67089\u65e5 \u4e0b\u53481:02:26<br \/>\n*\/<br \/>\npublic class Reflections {<br \/>\nprivate static final String SETTER_PREFIX = &#8220;set&#8221;;<\/p>\n<p>private static final String GETTER_PREFIX = &#8220;get&#8221;;<\/p>\n<p>private static final String CGLIB_CLASS_SEPARATOR = &#8220;$$&#8221;;<\/p>\n<p>private static Logger logger = LoggerFactory.getLogger(Reflections.class);<\/p>\n<p>\/**<br \/>\n* @Description: \u8c03\u7528Getter\u65b9\u6cd5.<br \/>\n* @param obj<br \/>\n* @param propertyName<br \/>\n* @return<br \/>\n* @return Object<br \/>\n* @throws<br \/>\n* @author Stone<br \/>\n* @date 2015\u5e749\u670825\u65e5 \u4e0b\u53487:55:46<br \/>\n*\/<br \/>\npublic static Object invokeGetter(Object obj, String propertyName) {<br \/>\nString getterMethodName = GETTER_PREFIX + StringUtils.capitalize(propertyName);<br \/>\nreturn invokeMethod(obj, getterMethodName, new Class[] {}, new Object[] {});<br \/>\n}<\/p>\n<p>\/**<br \/>\n* @Description: \u8c03\u7528Setter\u65b9\u6cd5, \u4ec5\u5339\u914d\u65b9\u6cd5\u540d\u3002<br \/>\n* @param obj<br \/>\n* @param propertyName<br \/>\n* @param value<br \/>\n* @return void<br \/>\n* @throws<br \/>\n* @author Stone<br \/>\n* @date 2015\u5e749\u670825\u65e5 \u4e0b\u53487:55:59<br \/>\n*\/<br \/>\npublic static void invokeSetter(Object obj, String propertyName, Object value) {<br \/>\nString setterMethodName = SETTER_PREFIX + StringUtils.capitalize(propertyName);<br \/>\ninvokeMethodByName(obj, setterMethodName, new Object[] { value });<br \/>\n}<\/p>\n<p>\/**<br \/>\n* @Description: \u76f4\u63a5\u8bfb\u53d6\u5bf9\u8c61\u5c5e\u6027\u503c, \u65e0\u89c6private\/protected\u4fee\u9970\u7b26, \u4e0d\u7ecf\u8fc7getter\u51fd\u6570.<br \/>\n* @param obj<br \/>\n* @param fieldName<br \/>\n* @return<br \/>\n* @return Object<br \/>\n* @throws<br \/>\n* @author Stone<br \/>\n* @date 2015\u5e749\u670825\u65e5 \u4e0b\u53487:56:13<br \/>\n*\/<br \/>\npublic static Object getFieldValue(final Object obj, final String fieldName) {<br \/>\nField field = getAccessibleField(obj, fieldName);<\/p>\n<p>if (field == null) {<br \/>\nthrow new IllegalArgumentException(&#8220;Could not find field [&#8221; + fieldName + &#8220;] on target [&#8221; + obj + &#8220;]&#8221;);<br \/>\n}<\/p>\n<p>Object result = null;<br \/>\ntry {<br \/>\nresult = field.get(obj);<br \/>\n} catch (IllegalAccessException e) {<br \/>\nlogger.error(&#8220;\u4e0d\u53ef\u80fd\u629b\u51fa\u7684\u5f02\u5e38{}&#8221;, e.getMessage());<br \/>\n}<br \/>\nreturn result;<br \/>\n}<\/p>\n<p>\/**<br \/>\n* @Description: \u76f4\u63a5\u8bbe\u7f6e\u5bf9\u8c61\u5c5e\u6027\u503c, \u65e0\u89c6private\/protected\u4fee\u9970\u7b26, \u4e0d\u7ecf\u8fc7setter\u51fd\u6570.<br \/>\n* @param obj<br \/>\n* @param fieldName<br \/>\n* @param value<br \/>\n* @return void<br \/>\n* @throws<br \/>\n* @author Stone<br \/>\n* @date 2015\u5e749\u670825\u65e5 \u4e0b\u53487:56:26<br \/>\n*\/<br \/>\npublic static void setFieldValue(final Object obj, final String fieldName, final Object value) {<br \/>\nField field = getAccessibleField(obj, fieldName);<\/p>\n<p>if (field == null) {<br \/>\nthrow new IllegalArgumentException(&#8220;Could not find field [&#8221; + fieldName + &#8220;] on target [&#8221; + obj + &#8220;]&#8221;);<br \/>\n}<\/p>\n<p>try {<br \/>\n\/*if(&#8220;false&#8221;.equals(value) || &#8220;true&#8221;.equals(value)){<br \/>\nBoolean b = new Boolean(value.toString());<br \/>\nboolean b1 = b.booleanValue();<br \/>\nfield.set(obj, b1);<br \/>\n}else{<br \/>\nfield.set(obj, value);<br \/>\n}*\/<br \/>\nfield.set(obj, value);<br \/>\n} catch (IllegalAccessException e) {<br \/>\nlogger.error(&#8220;\u4e0d\u53ef\u80fd\u629b\u51fa\u7684\u5f02\u5e38:{}&#8221;, e.getMessage());<br \/>\n}<br \/>\n}<\/p>\n<p>\/**<br \/>\n* @Description: \u76f4\u63a5\u8c03\u7528\u5bf9\u8c61\u65b9\u6cd5, \u65e0\u89c6private\/protected\u4fee\u9970\u7b26.<br \/>\n* \u7528\u4e8e\u4e00\u6b21\u6027\u8c03\u7528\u7684\u60c5\u51b5\uff0c\u5426\u5219\u5e94\u4f7f\u7528getAccessibleMethod()\u51fd\u6570\u83b7\u5f97Method\u540e\u53cd\u590d\u8c03\u7528. \u540c\u65f6\u5339\u914d\u65b9\u6cd5\u540d+\u53c2\u6570\u7c7b\u578b.<br \/>\n* @param obj<br \/>\n* @param methodName<br \/>\n* @param parameterTypes<br \/>\n* @param args<br \/>\n* @return<br \/>\n* @return Object<br \/>\n* @throws<br \/>\n* @author Stone<br \/>\n* @date 2015\u5e749\u670825\u65e5 \u4e0b\u53487:56:33<br \/>\n*\/<br \/>\npublic static Object invokeMethod(final Object obj, final String methodName, final Class&lt;?&gt;[] parameterTypes,<br \/>\nfinal Object[] args) {<br \/>\nMethod method = getAccessibleMethod(obj, methodName, parameterTypes);<br \/>\nif (method == null) {<br \/>\nthrow new IllegalArgumentException(&#8220;Could not find method [&#8221; + methodName + &#8220;] on target [&#8221; + obj + &#8220;]&#8221;);<br \/>\n}<\/p>\n<p>try {<br \/>\nreturn method.invoke(obj, args);<br \/>\n} catch (Exception e) {<br \/>\nthrow convertReflectionExceptionToUnchecked(e);<br \/>\n}<br \/>\n}<\/p>\n<p>\/**<br \/>\n* @Description: \u76f4\u63a5\u8c03\u7528\u5bf9\u8c61\u65b9\u6cd5, \u65e0\u89c6private\/protected\u4fee\u9970\u7b26\uff0c<br \/>\n* \u7528\u4e8e\u4e00\u6b21\u6027\u8c03\u7528\u7684\u60c5\u51b5\uff0c\u5426\u5219\u5e94\u4f7f\u7528getAccessibleMethodByName()\u51fd\u6570\u83b7\u5f97Method\u540e\u53cd\u590d\u8c03\u7528.<br \/>\n* \u53ea\u5339\u914d\u51fd\u6570\u540d\uff0c\u5982\u679c\u6709\u591a\u4e2a\u540c\u540d\u51fd\u6570\u8c03\u7528\u7b2c\u4e00\u4e2a.<br \/>\n* @param obj<br \/>\n* @param methodName<br \/>\n* @param args<br \/>\n* @return<br \/>\n* @return Object<br \/>\n* @throws<br \/>\n* @author Stone<br \/>\n* @date 2015\u5e749\u670825\u65e5 \u4e0b\u53487:56:57<br \/>\n*\/<br \/>\npublic static Object invokeMethodByName(final Object obj, final String methodName, final Object[] args) {<br \/>\nMethod method = getAccessibleMethodByName(obj, methodName);<br \/>\nif (method == null) {<br \/>\nthrow new IllegalArgumentException(&#8220;Could not find method [&#8221; + methodName + &#8220;] on target [&#8221; + obj + &#8220;]&#8221;);<br \/>\n}<\/p>\n<p>try {<br \/>\nreturn method.invoke(obj, args);<br \/>\n} catch (Exception e) {<br \/>\nthrow convertReflectionExceptionToUnchecked(e);<br \/>\n}<br \/>\n}<\/p>\n<p>\/**<br \/>\n* @Description: \u5faa\u73af\u5411\u4e0a\u8f6c\u578b, \u83b7\u53d6\u5bf9\u8c61\u7684DeclaredField, \u5e76\u5f3a\u5236\u8bbe\u7f6e\u4e3a\u53ef\u8bbf\u95ee.<br \/>\n* \u5982\u5411\u4e0a\u8f6c\u578b\u5230Object\u4ecd\u65e0\u6cd5\u627e\u5230, \u8fd4\u56denull.<br \/>\n* @param obj<br \/>\n* @param fieldName<br \/>\n* @return<br \/>\n* @return Field<br \/>\n* @throws<br \/>\n* @author Stone<br \/>\n* @date 2015\u5e749\u670825\u65e5 \u4e0b\u53487:57:39<br \/>\n*\/<br \/>\npublic static Field getAccessibleField(final Object obj, final String fieldName) {<br \/>\nValidate.notNull(obj, &#8220;object can&#8217;t be null&#8221;);<br \/>\nValidate.notBlank(fieldName, &#8220;fieldName can&#8217;t be blank&#8221;);<br \/>\nfor (Class&lt;?&gt; superClass = obj.getClass(); superClass != Object.class; superClass = superClass<br \/>\n.getSuperclass()) {<br \/>\ntry {<br \/>\nField field = superClass.getDeclaredField(fieldName);<br \/>\nmakeAccessible(field);<br \/>\nreturn field;<br \/>\n} catch (NoSuchFieldException e) {\/\/ NOSONAR<br \/>\n\/\/ Field\u4e0d\u5728\u5f53\u524d\u7c7b\u5b9a\u4e49,\u7ee7\u7eed\u5411\u4e0a\u8f6c\u578b<br \/>\n}<br \/>\n}<br \/>\nreturn null;<br \/>\n}<\/p>\n<p>\/**<br \/>\n* @Description: \u5faa\u73af\u5411\u4e0a\u8f6c\u578b, \u83b7\u53d6\u5bf9\u8c61\u7684DeclaredMethod,\u5e76\u5f3a\u5236\u8bbe\u7f6e\u4e3a\u53ef\u8bbf\u95ee. \u5982\u5411\u4e0a\u8f6c\u578b\u5230Object\u4ecd\u65e0\u6cd5\u627e\u5230, \u8fd4\u56denull.<br \/>\n* \u5339\u914d\u51fd\u6570\u540d+\u53c2\u6570\u7c7b\u578b.<br \/>\n* \u7528\u4e8e\u65b9\u6cd5\u9700\u8981\u88ab\u591a\u6b21\u8c03\u7528\u7684\u60c5\u51b5. \u5148\u4f7f\u7528\u672c\u51fd\u6570\u5148\u53d6\u5f97Method,\u7136\u540e\u8c03\u7528Method.invoke(Object obj, Object&#8230;args).<br \/>\n* @param obj<br \/>\n* @param methodName<br \/>\n* @param parameterTypes<br \/>\n* @return<br \/>\n* @return Method<br \/>\n* @throws<br \/>\n* @author Stone<br \/>\n* @date 2015\u5e749\u670825\u65e5 \u4e0b\u53487:57:57<br \/>\n*\/<br \/>\npublic static Method getAccessibleMethod(final Object obj, final String methodName,<br \/>\nfinal Class&lt;?&gt;&#8230; parameterTypes) {<br \/>\nValidate.notNull(obj, &#8220;object can&#8217;t be null&#8221;);<br \/>\nValidate.notBlank(methodName, &#8220;methodName can&#8217;t be blank&#8221;);<\/p>\n<p>for (Class&lt;?&gt; searchType = obj.getClass(); searchType != Object.class; searchType = searchType<br \/>\n.getSuperclass()) {<br \/>\ntry {<br \/>\nMethod method = searchType.getDeclaredMethod(methodName, parameterTypes);<br \/>\nmakeAccessible(method);<br \/>\nreturn method;<br \/>\n} catch (NoSuchMethodException e) {<br \/>\n\/\/ Method\u4e0d\u5728\u5f53\u524d\u7c7b\u5b9a\u4e49,\u7ee7\u7eed\u5411\u4e0a\u8f6c\u578b<br \/>\n}<br \/>\n}<br \/>\nreturn null;<br \/>\n}<\/p>\n<p>\/**<br \/>\n* @Description: \u5faa\u73af\u5411\u4e0a\u8f6c\u578b, \u83b7\u53d6\u5bf9\u8c61\u7684DeclaredMethod,\u5e76\u5f3a\u5236\u8bbe\u7f6e\u4e3a\u53ef\u8bbf\u95ee. \u5982\u5411\u4e0a\u8f6c\u578b\u5230Object\u4ecd\u65e0\u6cd5\u627e\u5230, \u8fd4\u56denull. \u53ea\u5339\u914d\u51fd\u6570\u540d.<br \/>\n* \u7528\u4e8e\u65b9\u6cd5\u9700\u8981\u88ab\u591a\u6b21\u8c03\u7528\u7684\u60c5\u51b5. \u5148\u4f7f\u7528\u672c\u51fd\u6570\u5148\u53d6\u5f97Method,\u7136\u540e\u8c03\u7528Method.invoke(Object obj, Object&#8230;args)<br \/>\n* @param obj<br \/>\n* @param methodName<br \/>\n* @return<br \/>\n* @return Method<br \/>\n* @throws<br \/>\n* @author Stone<br \/>\n* @date 2015\u5e749\u670825\u65e5 \u4e0b\u53487:58:48<br \/>\n*\/<br \/>\npublic static Method getAccessibleMethodByName(final Object obj, final String methodName) {<br \/>\nValidate.notNull(obj, &#8220;object can&#8217;t be null&#8221;);<br \/>\nValidate.notBlank(methodName, &#8220;methodName can&#8217;t be blank&#8221;);<\/p>\n<p>for (Class&lt;?&gt; searchType = obj.getClass(); searchType != Object.class; searchType = searchType<br \/>\n.getSuperclass()) {<br \/>\nMethod[] methods = searchType.getDeclaredMethods();<br \/>\nfor (Method method : methods) {<br \/>\nif (method.getName().equals(methodName)) {<br \/>\nmakeAccessible(method);<br \/>\nreturn method;<br \/>\n}<br \/>\n}<br \/>\n}<br \/>\nreturn null;<br \/>\n}<\/p>\n<p>\/**<br \/>\n* @Description: \u6539\u53d8private\/protected\u7684\u65b9\u6cd5\u4e3apublic\uff0c\u5c3d\u91cf\u4e0d\u8c03\u7528\u5b9e\u9645\u6539\u52a8\u7684\u8bed\u53e5\uff0c\u907f\u514dJDK\u7684SecurityManager\u62b1\u6028<br \/>\n* @param method<br \/>\n* @return void<br \/>\n* @throws<br \/>\n* @author Stone<br \/>\n* @date 2015\u5e749\u670825\u65e5 \u4e0b\u53487:59:24<br \/>\n*\/<br \/>\npublic static void makeAccessible(Method method) {<br \/>\nif ((!Modifier.isPublic(method.getModifiers()) || !Modifier.isPublic(method.getDeclaringClass().getModifiers()))<br \/>\n&amp;&amp; !method.isAccessible()) {<br \/>\nmethod.setAccessible(true);<br \/>\n}<br \/>\n}<\/p>\n<p>\/**<br \/>\n* @Description: \u6539\u53d8private\/protected\u7684\u6210\u5458\u53d8\u91cf\u4e3apublic\uff0c\u5c3d\u91cf\u4e0d\u8c03\u7528\u5b9e\u9645\u6539\u52a8\u7684\u8bed\u53e5\uff0c\u907f\u514dJDK\u7684SecurityManager\u62b1\u6028<br \/>\n* @param field<br \/>\n* @return void<br \/>\n* @throws<br \/>\n* @author Stone<br \/>\n* @date 2015\u5e749\u670825\u65e5 \u4e0b\u53487:59:40<br \/>\n*\/<br \/>\npublic static void makeAccessible(Field field) {<br \/>\nif ((!Modifier.isPublic(field.getModifiers()) || !Modifier.isPublic(field.getDeclaringClass().getModifiers())<br \/>\n|| Modifier.isFinal(field.getModifiers())) &amp;&amp; !field.isAccessible()) {<br \/>\nfield.setAccessible(true);<br \/>\n}<br \/>\n}<\/p>\n<p>\/**<br \/>\n* @Description: \u901a\u8fc7\u53cd\u5c04, \u83b7\u5f97Class\u5b9a\u4e49\u4e2d\u58f0\u660e\u7684\u6cdb\u578b\u53c2\u6570\u7684\u7c7b\u578b, \u6ce8\u610f\u6cdb\u578b\u5fc5\u987b\u5b9a\u4e49\u5728\u7236\u7c7b\u5904 \u5982\u65e0\u6cd5\u627e\u5230, \u8fd4\u56deObject.class. eg.<br \/>\n* @param clazz<br \/>\n* @return<br \/>\n* @return Class&lt;T&gt;<br \/>\n* @throws<br \/>\n* @author Stone<br \/>\n* @date 2015\u5e749\u670825\u65e5 \u4e0b\u53487:59:53<br \/>\n*\/<br \/>\n@SuppressWarnings({ &#8220;unchecked&#8221;})<br \/>\npublic static &lt;T&gt; Class&lt;T&gt; getClassGenricType(final Class clazz) {<br \/>\nreturn getClassGenricType(clazz, 0);<br \/>\n}<\/p>\n<p>\/**<br \/>\n* @Description: \u901a\u8fc7\u53cd\u5c04, \u83b7\u5f97Class\u5b9a\u4e49\u4e2d\u58f0\u660e\u7684\u7236\u7c7b\u7684\u6cdb\u578b\u53c2\u6570\u7684\u7c7b\u578b. \u5982\u65e0\u6cd5\u627e\u5230, \u8fd4\u56deObject.class.<br \/>\n* @param clazz<br \/>\n* @param index<br \/>\n* @return<br \/>\n* @return Class<br \/>\n* @throws<br \/>\n* @author Stone<br \/>\n* @date 2015\u5e749\u670825\u65e5 \u4e0b\u53488:00:07<br \/>\n*\/<br \/>\n@SuppressWarnings({ &#8220;unchecked&#8221; })<br \/>\npublic static Class getClassGenricType(final Class clazz, final int index) {<\/p>\n<p>Type genType = clazz.getGenericSuperclass();<\/p>\n<p>if (!(genType instanceof ParameterizedType)) {<br \/>\nlogger.warn(clazz.getSimpleName() + &#8220;&#8216;s superclass not ParameterizedType&#8221;);<br \/>\nreturn Object.class;<br \/>\n}<\/p>\n<p>Type[] params = ((ParameterizedType) genType).getActualTypeArguments();<\/p>\n<p>if ((index &gt;= params.length) || (index &lt; 0)) {<br \/>\nlogger.warn(&#8220;Index: &#8221; + index + &#8220;, Size of &#8221; + clazz.getSimpleName() + &#8220;&#8216;s Parameterized Type: &#8221;<br \/>\n+ params.length);<br \/>\nreturn Object.class;<br \/>\n}<br \/>\nif (!(params[index] instanceof Class)) {<br \/>\nlogger.warn(clazz.getSimpleName() + &#8221; not set the actual class on superclass generic parameter&#8221;);<br \/>\nreturn Object.class;<br \/>\n}<\/p>\n<p>return (Class) params[index];<br \/>\n}<\/p>\n<p>\/**<br \/>\n* @Description: \u901a\u8fc7\u53cd\u5c04\uff0c\u83b7\u5f97\u5f53\u524d\u5bf9\u8c61\u7c7b\u578b<br \/>\n* @param instance<br \/>\n* @return<br \/>\n* @return Class&lt;?&gt;<br \/>\n* @throws<br \/>\n* @author Stone<br \/>\n* @date 2015\u5e749\u670825\u65e5 \u4e0b\u53488:00:29<br \/>\n*\/<br \/>\n@SuppressWarnings({&#8220;unchecked&#8221; })<br \/>\npublic static Class&lt;?&gt; getUserClass(Object instance) {<br \/>\nValidate.notNull(instance, &#8220;Instance must not be null&#8221;);<br \/>\nClass clazz = instance.getClass();<br \/>\nif ((clazz != null) &amp;&amp; clazz.getName().contains(CGLIB_CLASS_SEPARATOR)) {<br \/>\nClass&lt;?&gt; superClass = clazz.getSuperclass();<br \/>\nif ((superClass != null) &amp;&amp; !Object.class.equals(superClass)) {<br \/>\nreturn superClass;<br \/>\n}<br \/>\n}<br \/>\nreturn clazz;<\/p>\n<p>}<\/p>\n<p>\/**<br \/>\n* @Description: \u5c06\u53cd\u5c04\u65f6\u7684checked exception\u8f6c\u6362\u4e3aunchecked exception.<br \/>\n* @param e<br \/>\n* @return<br \/>\n* @return RuntimeException<br \/>\n* @throws<br \/>\n* @author Stone<br \/>\n* @date 2015\u5e749\u670825\u65e5 \u4e0b\u53488:01:08<br \/>\n*\/<br \/>\npublic static RuntimeException convertReflectionExceptionToUnchecked(Exception e) {<br \/>\nif ((e instanceof IllegalAccessException) || (e instanceof IllegalArgumentException)<br \/>\n|| (e instanceof NoSuchMethodException)) {<br \/>\nreturn new IllegalArgumentException(e);<br \/>\n} else if (e instanceof InvocationTargetException) {<br \/>\nreturn new RuntimeException(((InvocationTargetException) e).getTargetException());<br \/>\n} else if (e instanceof RuntimeException) {<br \/>\nreturn (RuntimeException) e;<br \/>\n}<br \/>\nreturn new RuntimeException(&#8220;Unexpected Checked Exception.&#8221;, e);<br \/>\n}<\/p>\n<p>\/**<br \/>\n* @Description: \u5faa\u73af\u5411\u4e0a\uff0c\u83b7\u53d6\u5bf9\u8c61\u58f0\u660e\u7684\u5b57\u6bb5<br \/>\n* @author xiaopeng.ma<br \/>\n* @date 2017\/3\/23 17:03<br \/>\n*\/<br \/>\n\/\/ public static Map&lt;String, String&gt; getAllDeclaredField(T t) {<br \/>\n\/\/ Map&lt;String, String&gt; map = new HashMap&lt;String, String&gt;();<br \/>\n\/\/ if (t != null) {<br \/>\n\/\/ Class&lt;?&gt; clazz = t.getClass();<br \/>\n\/\/ for (; Object.class != clazz; clazz.getSuperclass()) {<br \/>\n\/\/ Field[] declaredFields = clazz.getDeclaredFields();<br \/>\n\/\/ for (Field declaredField : declaredFields) {<br \/>\n\/\/ map.put(declaredField.getName(), declaredField.getClass().getSimpleName());<br \/>\n\/\/ }<br \/>\n\/\/ }<br \/>\n\/\/ }<br \/>\n\/\/ return map;<br \/>\n\/\/ }<\/p>\n<p>}<\/p>\n","protected":false},"excerpt":{"rendered":"<p>package com.22pig.util; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.Validate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; \/** * ClassName: Reflections * @Description: \u53cd\u5c04\u5de5\u5177\u7c7b.\u63d0\u4f9b\u8c03\u7528getter\/setter\u65b9\u6cd5, \u8bbf\u95ee\u79c1\u6709\u53d8\u91cf, \u8c03\u7528\u79c1\u6709\u65b9\u6cd5, \u83b7\u53d6\u6cdb\u578b\u7c7b\u578bClass,\u88abAOP\u8fc7\u7684\u771f\u5b9e\u7c7b\u7b49\u5de5\u5177\u51fd\u6570. * @author * @date 2015\u5e749\u67089\u65e5 \u4e0b\u53481:02:26 *\/ public class Reflections { private static final String SETTER_PREFIX = &#8220;set&#8221;; private static final String GETTER_PREFIX &#8230; <a title=\"[java]Reflections \u53cd\u5c04\u5de5\u5177\u7c7b\" class=\"read-more\" href=\"http:\/\/22pig.com\/?p=149\" aria-label=\"More on [java]Reflections \u53cd\u5c04\u5de5\u5177\u7c7b\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[],"class_list":["post-149","post","type-post","status-publish","format-standard","hentry","category-java"],"_links":{"self":[{"href":"http:\/\/22pig.com\/index.php?rest_route=\/wp\/v2\/posts\/149","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/22pig.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/22pig.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/22pig.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/22pig.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=149"}],"version-history":[{"count":0,"href":"http:\/\/22pig.com\/index.php?rest_route=\/wp\/v2\/posts\/149\/revisions"}],"wp:attachment":[{"href":"http:\/\/22pig.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=149"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/22pig.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=149"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/22pig.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=149"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}