<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    zhongli

      BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
      3 Posts :: 0 Stories :: 0 Comments :: 0 Trackbacks

    在類中定義了一個屬性abc,如何獲取這個變量的abc的名字串呢?也就是說怎么知道abc這個變量的名字是abc,這個問題比較的好玩。

    這個是偶在一開發(fā)中遇到的一個比較有趣的問題,找 了半天的資料加下偶辛勤的思考,終于找到的解決方法。用反射~~~

    java提供了很強大的反射機制,可以說比動態(tài)語言還動態(tài)。但是這個東東平時的應用不是很多的說。

    現(xiàn)提供一個可以動態(tài)獲取對象中的變量的變量名稱的bt方法:
    甜性澀愛h動漫下載小說520網(wǎng) 
    public class MyTools {
        public static void setAllComponentsName(Object f) {
            // 獲取f對象對應類中的所有屬性域
            Field[] fields = f.getClass().getDeclaredFields();
            for(int i = 0 , len = fields.length; i < len; i++) {
                // 對于每個屬性,獲取屬性名
                String varName = fields[i].getName();
                try {
                    // 獲取原來的訪問控制權限
                    boolean accessFlag = fields[i].isAccessible();
                    // 修改訪問控制權限
                    fields[i].setAccessible(true);
                    // 獲取在對象f中屬性fields[i]對應的對象中的變量
                    Object o = fields[i].get(f);
                    System.out.println("傳入的對象中包含一個如下的變量:" + varName +  " = " + o);
                    // 恢復訪問控制權限
                    fields[i].setAccessible(accessFlag);
                } catch (IllegalArgumentException ex) {
                    ex.printStackTrace();
                } catch (IllegalAccessException ex) {
                    ex.printStackTrace();
                }
            }
        }

        public static void main(String[] args)
        {
                //  測試代碼用來獲取一個JLabel中聲名的所有的屬性名和其屬性變量
                setAllComponentsName(new JLabel("測試"));
        }
     }

     fields[i].setAccessible(true);這句主要是因為私有的變量在對象外是無法訪問的,通過這個設置就可以改變私有變量的訪問權,還真的有點恐怖,當偶把這個解決方法告訴Boss的時候,Boss差點吐血,私有的都能訪問了,還有什么安全可言?

    不過了,有安全就有特權,所以由于能很好的解決問題還是被采納了,嘻嘻~~~

    Object o = fields[i].get(f);這句的作用就是取得傳入對象f中類的屬性fields[i]對應的真實的屬性變量,說的有點別扭,比如有一個類A中有一個int abc的屬性,并且我們有兩個A類的對象a1,a2,那么當我們用fields[i].get(a1)的時候得到的將是對象a1中的具體的abc屬性,而我們用fields[i].get(a2)的時候得到的將是對象a2中的具體的abc屬性。

    最后是用一個main方法測試了一個JLabel對象,打印出了JLabel中聲名的所有的變量名,并輸出了其對應的變量的值。結果如下:

    傳入的對象中包含一個如下的變量:uiClassID = LabelUI
    傳入的對象中包含一個如下的變量:mnemonic = 0
    傳入的對象中包含一個如下的變量:mnemonicIndex = -1
    傳入的對象中包含一個如下的變量:text = 測試
    傳入的對象中包含一個如下的變量:defaultIcon = null
    傳入的對象中包含一個如下的變量:disabledIcon = null
    傳入的對象中包含一個如下的變量:disabledIconSet = false
    傳入的對象中包含一個如下的變量:verticalAlignment = 0
    傳入的對象中包含一個如下的變量:horizontalAlignment = 10
    傳入的對象中包含一個如下的變量:verticalTextPosition = 0
    傳入的對象中包含一個如下的變量:horizontalTextPosition = 11
    傳入的對象中包含一個如下的變量:iconTextGap = 4
    傳入的對象中包含一個如下的變量:labelFor = null
    傳入的對象中包含一個如下的變量:LABELED_BY_PROPERTY = labeledBy

    posted on 2009-02-13 12:53 zhongli 閱讀(4579) 評論(0)  編輯  收藏
    主站蜘蛛池模板: 人体大胆做受免费视频| 亚洲毛片免费观看| 搜日本一区二区三区免费高清视频 | 亚洲乱码无码永久不卡在线| 猫咪www免费人成网站| 亚洲 无码 在线 专区| 一级毛片免费观看不收费| 国产成人亚洲精品影院| 中国一级毛片视频免费看| 亚洲精品国产成人片| 四虎影视无码永久免费| 亚洲一级二级三级不卡| 91免费国产在线观看| 亚洲美国产亚洲AV| 免费国产一级特黄久久| 国产免费内射又粗又爽密桃视频| 亚洲综合AV在线在线播放| 久久免费观看国产精品| 亚洲午夜国产精品| 日美韩电影免费看| 免费无码又爽又刺激高潮软件| 中文字幕亚洲综合精品一区| 三年片在线观看免费大全| 亚洲AV无码专区在线厂| 亚洲综合图色40p| 18勿入网站免费永久| 爱情岛亚洲论坛在线观看| 日韩一卡2卡3卡4卡新区亚洲| 一级毛片免费观看不卡的| 亚洲中文字幕久久久一区| 免费国产精品视频| 免费视频精品一区二区三区| 国产v亚洲v天堂a无| 亚洲国产成人爱av在线播放| 日韩插啊免费视频在线观看| 亚洲中文字幕无码mv| 色久悠悠婷婷综合在线亚洲| 国内精自视频品线六区免费| 看免费毛片天天看| 亚洲精品乱码久久久久久下载| 国产一级理论免费版|