<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                1. 什么是反射? > 1. 主要是指程序可以訪問,檢測和修改它本身狀態或行為的一種能力,并能根據自身行為的狀態和結果,調整或修改應用所描述行為的狀態和相關的語義。 > 2. 反射是java中一種強大的工具,能夠使我們很方便的創建靈活的代碼,這些代碼可以再運行時裝配,無需在組件之間進行源代碼鏈接。但是反射使用不當會成本很高! > 2. 反射機制的作用: > 1. 反編譯:.class-->.java > 2. 通過反射機制訪問java對象的屬性,方法,構造方法等; 3. 在這里先看一下sun為我們提供了那些反射機制中的類: java.lang.reflect.Constructor; java.lang.reflect.Field; java.lang.reflect.Method; java.lang.reflect.Modifier; ## 1. Class 對象 ### 1.1 獲取Class對象 > 想要利用反射技術,首先獲取Class對象,每個類在java虛擬機中的字節碼對象,獲取Class對象又四種辦法 > 1. 通過類本身來獲得對象 Class classname = this .getClass(); > 2. 通過子類的實例獲取父類對象 ClassName cn = new ClassName(); UserClass = cn.getClass(); Class SubUserClass = UserClass.getSuperclass(); > 3. 通過類名加.class獲取對象 Class ForClass = **.**.ClassName. class ;(類在包中的路徑加. class ) > 4. 通過類名的字符串獲取Class對象 Class ForName = Class.forName( "**.**.ClassName" ); ### 1.2 遍歷屬性 ~~~ public static List<String> reflectObject(String cla) throws ClassNotFoundException { Class clas = Class.forName(cla); Field[] objFields = clas.getDeclaredFields(); List<String> fields = new ArrayList<String>(); for(int i=0;i<objFields.length;i++){ String fieldJson = "{title:'"; objFields[i].setAccessible(true); // 設置些屬性是可以訪問的 String name = objFields[i].getName(); fieldJson += name + "', field:'" + name + "', align: 'center', valign: 'middle', sortable: true}"; fields.add(fieldJson); } return fields; } ~~~ ### 1.3 遍歷屬性,獲取值 ~~~ public static Map<String, Object> getKeyAndValue(Object obj) { Map<String, Object> map = new HashMap<String, Object>(); // 得到類對象 Class userCla = (Class) obj.getClass(); /* 得到類中的所有屬性集合 */ Field[] fs = userCla.getDeclaredFields(); for (int i = 0; i < fs.length; i++) { Field f = fs[i]; f.setAccessible(true); // 設置些屬性是可以訪問的 Object val = new Object(); try { val = f.get(obj); // 傳入反射的對象,得到此屬性的值 map.put(f.getName(), val);// 設置鍵值 } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } System.out.println("單個對象的所有鍵值==反射==" + map.toString()); return map; } ~~~ ## 2. 反射獲取泛型參數 getGenericSuperclass():`獲取父類類型<T>` ~~~ public class Person<T> { } import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; public class Student extends Person<Student> { public static void main(String[] args) { Student st=new Student(); Class clazz=st.getClass(); //getSuperclass()獲得該類的父類 System.out.println(clazz.getSuperclass()); //getGenericSuperclass()獲得帶有泛型的父類 //Type是 Java 編程語言中所有類型的公共高級接口。它們包括原始類型、參數化類型、數組類型、類型變量和基本類型。 Type type=clazz.getGenericSuperclass(); System.out.println(type); ParameterizedType p=(ParameterizedType)type; //轉成泛型類型 Class c=(Class) p.getActualTypeArguments()[0]; //getActualTypeArguments獲取參數化類型的數組,泛型可能有多個 System.out.println(c); } } ~~~ 打印結果: ~~~ class com.test.Person com.test.Person<com.test.Student> class com.test.Student ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看