日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

Effective Java之接口优先于反射机制(五十三)

發(fā)布時(shí)間:2024/2/28 java 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Effective Java之接口优先于反射机制(五十三) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

核心反射機(jī)制java.lang.reflect提供了“通過程序來訪問關(guān)于已裝載的類的信息”的能力,給定一個(gè)Class實(shí)例,可以獲得Constructor、Method、Field實(shí)例,這些對(duì)象提供“通過程序來訪問類的成員名稱、域類型、方法簽名等信息”的能力。

反射機(jī)制允許一個(gè)類使用另一個(gè)類,即使當(dāng)前者被編譯的時(shí)候后者還根本不存在,存在的代價(jià):

1.失去編譯時(shí)類型檢查的好處,包括異常檢查。

2.執(zhí)行反射訪問所需的代碼很長(zhǎng)。

3.性能上的損失。

?

反射機(jī)制的使用場(chǎng)景

反射功能只是在設(shè)計(jì)時(shí)被用到,通常,普通應(yīng)用程序在運(yùn)行時(shí)不應(yīng)該以反射的方式訪問對(duì)象。

有些復(fù)雜的應(yīng)用程序需要使用反射機(jī)制,包括類瀏覽器、對(duì)象檢測(cè)器、代碼分析工具、解釋型的內(nèi)嵌式系統(tǒng)。在RPC中使用反射機(jī)制也是合適的,這樣就不再需要存根編譯器。

對(duì)于有些程序,必須用到在編譯時(shí)無法獲取的類,但是在編譯時(shí)存在適當(dāng)?shù)慕涌诨蛘叱?#xff0c;通過它們可以引用這個(gè)類,就可以以反射的方式創(chuàng)建實(shí)例,然后通過它們的接口或者超類,以正常的方式訪問這些實(shí)例。

?
?

反射機(jī)制的例子

創(chuàng)建Set實(shí)例,吧命令行參數(shù)插入到集合中,然后打印該集合,其中第一個(gè)參數(shù)指定打印的結(jié)果,如果是HashSet以隨機(jī)的方式打印出來,如果是TreeSet按照字母順序打印出來的程序:

public static void main(String[] args) {Class<?> c = null;try {c = Class.forName(args[0]);} catch(ClassNotFoundException e) {System.out.println("Class not found");System.exit(1);}Set<String> s = null;try {s = (Set<String>) c.newInstance();} catch(IllegalAccessException e) {System.out.println("Class not accessible");System.exit(1);} catch(InstantiationException e) {System.out.println("Class not instantiable");System.exit(1);}s.addAll(Arrays.asList(args).subList(1, args.length));System.out.println(s); }

這相當(dāng)于一個(gè)集合測(cè)試器,通過反射測(cè)試Set實(shí)現(xiàn),同時(shí),它也可以作為通用的集合性能分析工具。
這種方法足以完成成熟的服務(wù)提供者框架。
具體怎么實(shí)現(xiàn),可以去看一下這篇文章
服務(wù)提供者框架

總結(jié)

以上是生活随笔為你收集整理的Effective Java之接口优先于反射机制(五十三)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。