亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

java反射機制實戰示例分享

2019-11-26 15:38:18
字體:
來源:轉載
供稿:網友

首先,我們來認識幾個類。

Class(java.lang.Class)

Class對象是一個特殊對象,每一個類都有一個Class對象,用來創建該類的“常規”對象。可以通過對象的getClass()方法獲取。

比如我們運行這一行代碼:

復制代碼 代碼如下:

System.out.println("測試".getClass().toString());

得到的結果就是:

復制代碼 代碼如下:

class java.lang.String

Field(java.lang.reflect.Field)

這個類表示一個字段,可以使用這個字段來訪問類

下面,我們來創建測試類:

復制代碼 代碼如下:

class Book {
    public String title;
    public int length = 0;
    public ArrayList<Page> pages = null;

    @Override
    public String toString() {
        String sb = "Book:/n";
        sb += "title="+title+"/n";
        sb += "length=" + length + "/n";
        sb += "pages=" + pages + "/n";
        if (pages != null) {
            for (Page page : pages) {
                sb += page.toString();
            }
        }
        return sb.toString();
    }
}

class Page {
    @Override
    public String toString() {
        return "page/n";
    }
}

調用以下方法來測試上面的類:

復制代碼 代碼如下:

Book book = new Book();
System.out.println(book);

它的結果是這樣:

復制代碼 代碼如下:

Book:
title=null
length=0
pages=null

這是book對象的初始狀態

我們下面通過反射機制,獲取book對象中的length字段并進行修改,查看結果:

復制代碼 代碼如下:

Book book = new Book();
Class<?> aClass = book.getClass();
Field field = aClass.getField("length");
field.setInt(book, 9);
System.out.println(book);

可以看到運行結果是:

復制代碼 代碼如下:

Book:
title=null
length=9
pages=null


可以看出,length字段的值已經被修改了。

上面修改的是int型的簡單字段,事實上像title字段這樣的對象字段也是可以修改的,下面是示例:

復制代碼 代碼如下:

Book book = new Book();
Class<?> aClass = book.getClass();
Field[] fields = aClass.getFields();
for (Field field : fields) {
    field.setAccessible(true);
    if(field.getType().equals(String.class)){
        field.set(book, "格林童話");
    }else if(field.getType().equals(int.class)){
        field.set(book, 199);
    }
}
System.out.println(book);

上面的代碼輸出結果是:

復制代碼 代碼如下:

Book:
title=格林童話
length=199
pages=null

事實上,是將所有String類型的字段都修改成“格林童話”,將所有int類型字段都修改成199 。我們甚至根本不知道這個字段代表什么意思。

下面,我們對pages這個字段進行修改。這個字段是個ArrayList,我們將創建一個ArrayList對象,并向其中插入一個對象。

復制代碼 代碼如下:

Book book = new Book();
Class<?> aClass = book.getClass();
Field[] fields = aClass.getFields();
for (Field field : fields) {
    field.setAccessible(true);
    if(field.getType().equals(ArrayList.class)){
        String genric = field.getGenericType().toString();
        String genricClass = genric.substring(
                            genric.indexOf('<') + 1,
                            genric.indexOf('>'));
        Class<?> entityClass = Class.forName(genricClass);
        Object obj = entityClass.newInstance();
        ArrayList list = new ArrayList();
        list.add(obj);
        field.set(book, list);
        }
    }
System.out.println(book);

輸出結果如下:

復制代碼 代碼如下:

Book:
title=null
length=0
pages=[page
]
Page

可以看出,盡管我們根本沒有直接使用Page類,但還是創建出了一個Page對象。

Page對象的創建語句在:entityClass.newInstance()這一句。newInstance語句是Class對象的重要方法,用來創建這個類對應的對象。當然,需要類的構造方法支持。另外,通過genGenericType方法,我們可以獲取到字段的類型修飾符。放在這里,獲取到的就是ArrayList<Page>。有了這一個字符串,我們就可以通過類加載器Class.forName來加載Page類并創建一個Page對象了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人欧美一区二区三区在线| 91影院在线免费观看视频| 国产精品扒开腿做| 成人免费观看网址| 国产免费一区二区三区在线能观看| 亚洲精品一二区| 日韩成人免费视频| 亚洲va欧美va国产综合剧情| 97超级碰在线看视频免费在线看| 国产成人免费91av在线| 国产区精品在线观看| 97视频在线观看成人| 欧美在线视频网| 国产亚洲精品激情久久| 91在线直播亚洲| 91在线视频一区| 91久久久亚洲精品| 成人av在线亚洲| 日韩小视频在线观看| 国产精品免费看久久久香蕉| 国内精品久久久久伊人av| 欧美激情精品久久久久久变态| 九九热精品视频国产| 久热爱精品视频线路一| 欧美日韩福利在线观看| 俺去亚洲欧洲欧美日韩| 欧美日韩999| 色与欲影视天天看综合网| 日韩成人av网| 91av在线播放视频| 久久97久久97精品免视看| 亚洲精品suv精品一区二区| 国产精品视频白浆免费视频| 国产精品久久久久久av| 日韩精品在线免费观看视频| 一区二区三区回区在观看免费视频| 亚洲国产精品人人爽夜夜爽| 91亚洲永久免费精品| 国产精欧美一区二区三区| 久久久久久久久久久人体| 欧美疯狂做受xxxx高潮| 国产成人精品免高潮在线观看| 九色精品免费永久在线| 欧美成人在线网站| 国产亚洲精品美女久久久久| 欧美日韩性视频在线| 欧美国产欧美亚洲国产日韩mv天天看完整| 精品国偷自产在线| 亚洲欧美中文字幕在线一区| 这里只有精品在线观看| 欧美视频在线视频| 精品国产一区二区三区四区在线观看| 成人精品一区二区三区电影黑人| 永久555www成人免费| 久久久久亚洲精品国产| 91豆花精品一区| 国产一区二区香蕉| 国产成人福利夜色影视| 亚洲qvod图片区电影| 欧美一级淫片播放口| 亚洲成年人在线播放| 精品久久久国产精品999| 精品久久久久久久久久国产| 欧美电影在线免费观看网站| 亚洲一区第一页| 欧美性生交大片免费| 日韩成人性视频| 欧美在线观看一区二区三区| 中文字幕免费精品一区高清| 91在线免费视频| 亚洲一区二区三区乱码aⅴ| 久久天天躁狠狠躁老女人| 91久久国产综合久久91精品网站| 最近日韩中文字幕中文| 久久国产精品免费视频| 国产精品扒开腿做| 亚洲精品视频网上网址在线观看| 91香蕉嫩草神马影院在线观看| 日韩激情片免费| 日韩小视频在线| 国产高清在线不卡| 国产精品福利在线观看网址| 高清一区二区三区四区五区| 日韩在线中文视频| 亚洲欧美色婷婷| 97婷婷涩涩精品一区| 日韩国产精品亚洲а∨天堂免| 91久久久国产精品| 日韩av在线免费观看一区| 成人福利视频网| 欧洲成人午夜免费大片| 欧美视频国产精品| 91精品国产91久久久久久不卡| 91伊人影院在线播放| 亚洲2020天天堂在线观看| 91精品视频免费看| 欧美成人免费在线视频| 国产在线拍偷自揄拍精品| 欧美日韩免费在线观看| 亚洲国内精品在线| 亚洲国产天堂久久综合网| 欧美成在线观看| 成人国内精品久久久久一区| 国产成人a亚洲精品| 亚洲欧美资源在线| 国产精品视频资源| 在线观看日韩www视频免费| 欧美成人国产va精品日本一级| 亚洲精品视频网上网址在线观看| 午夜精品视频在线| 岛国视频午夜一区免费在线观看| 欧美激情图片区| 国产在线播放不卡| 成人xxxxx| 欧美黄色www| 91在线精品视频| 国产午夜精品一区理论片飘花| 亚洲黄色av网站| 日韩国产一区三区| 欧美在线激情视频| 欧美情侣性视频| 热久久这里只有| 成人午夜在线视频一区| 国产97免费视| 亚洲美女视频网站| 欧美最猛性xxxx| 国产精品嫩草视频| 精品国产成人在线| 国产精品一区二区久久精品| 欧美在线www| 91免费人成网站在线观看18| 国产69精品久久久久9| 日本精品va在线观看| 国产精品色悠悠| 国产精品视频午夜| 日韩精品在线第一页| 中日韩美女免费视频网站在线观看| 亚洲欧美一区二区精品久久久| 91精品在线一区| 国产精品久久久久久久电影| 亚洲图片在线综合| 在线免费观看羞羞视频一区二区| 久久久久久亚洲| 日本免费久久高清视频| 蜜臀久久99精品久久久无需会员| 三级精品视频久久久久| 亚洲第一色在线| 中文字幕v亚洲ⅴv天堂| 中文字幕亚洲图片| 日韩激情视频在线播放| 国产精品久久久久久久美男| 亚洲天堂免费在线| 日韩美女视频在线观看| 国产精品人人做人人爽| 在线午夜精品自拍| 久久国产精品亚洲| 91在线观看免费网站| 中文字幕成人精品久久不卡| 久久久久久久久久久av| 久久精品福利视频| 日韩激情视频在线播放| 欧美激情综合亚洲一二区| 国产一区二区三区在线播放免费观看| 98精品国产高清在线xxxx天堂|