1. 寫幾個java反射工具方法

        共 2926字,需瀏覽 6分鐘

         ·

        2021-08-24 08:05

        在java中使用反射是常規(guī)操作,我們經(jīng)常需要面對未知的屬性或者經(jīng)過層層代理或者委派等情況下的屬性值,在不能給對方定性的基礎(chǔ)上,我們就可以采用一刀切的方式去解決問題。畢竟根本的這些屬性均在于與各個變形中。比如前些時候我們說的攔截器實(shí)現(xiàn)主從庫抉擇的問題。這塊我們寫幾個反射的工具類已被后用!
        public class FansheUtils {
        static Field getDeclaredField(String clazz, String fieldName) throws ClassNotFoundException { Field field=null; Class clz = Class.forName(clazz); //super class for (Class<?> s = clz; s != Object.class; s = s.getSuperclass()) { try { field= s.getDeclaredField(fieldName); field.setAccessible(true); } catch (NoSuchFieldException ignored) { } }        return field; } public static <T> T getFieldValue(Object object, String fieldName) throws ClassNotFoundException { Field field = getDeclaredField(object.getClass().getName() , fieldName); if (field == null) { throw new IllegalArgumentException("Could not find field [" + fieldName + "] on target [" + object + "]"); } Object result = null; try { result = field.get(object); } catch (IllegalAccessException ignored) { } return (T) result; }

        public static void setFieldValue(Object object, String fieldName, Object value) throws ClassNotFoundException { Field field = getDeclaredField(object.getClass().getName() , fieldName); try { //set public if (field.isAccessible()) { field.set(object, value); } else { //set privite field.setAccessible(true); field.set(object, value); field.setAccessible(false); } } catch (IllegalAccessException ignored) { } }
        protected Method getMethodByName(String methodName, Class<?> entityClazz) { Method[] methods = entityClazz.getMethods(); Method method = null; for (Method i : methods) { if (methodName.equals(i.getName())) { method = i; break; } } return method; }}
        測試一下:
        public class TestFanshe {
        static class Test{ private String name;
        private int age;
        @Override public String toString() { return "TestFanshe{" + "name='" + name + '\'' + ", age=" + age + '}'; }    }
        public static void main(String[] args) throws ClassNotFoundException { Test test=new Test(); String name=FansheUtils.getFieldValue(test,"name"); System.out.println(name); FansheUtils.setFieldValue(test,"name","tianjingle"); FansheUtils.setFieldValue(test,"age",1); System.out.println(test.toString()); }}

        午安~



        瀏覽 71
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
          
          

            1. 久久婷婷综合电影网 | 免费二区| 高圆圆一区二区三区 | 新疆女人A片在线观看 | 蜜桃网站在线观看 |