麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發(fā)設計 > 正文

Java中利用Reflection API優(yōu)化代碼

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

  摘要

  開發(fā)者通過各種各樣的方法來嘗試避免單調冗余的編程。一些編程的規(guī)則例如繼續(xù)、多態(tài)或者設計模型可以幫助開發(fā)者避免產生多余的代碼。不過由于軟件開發(fā)方面存在著不確定性,因此這些規(guī)則并不能消除代碼維護和重新編寫的需要。
在很多時候維護都是不可避免的,只有不能運作的軟件才是從不需要維護的。不過,這篇文章介紹了你可以使用java的Reflection API的功能來減少單調的代碼編寫,并可以使用活動的代碼產生來克服reflection的限制。

  數據配置(由外部的源頭得到數據并且將它裝載到一個Java對象中)可以利用reflection的好處來創(chuàng)建一個可重用的方案。問題是很簡單的:將數據由一個文件裝入到一個對象的字段中。現在假設用作數據的目標Java類每星期改變一次?有一個很直接的解決方法,不過你必須不斷地維護載入的過程來反映任何的改變。在更復雜的環(huán)境下,同樣的問題可能會令系統崩潰掉。對于一個處理過運用xml的大型系統的人來說,他就會碰到過這個問題。要編寫一個載入的過程通常是非常單調乏味的,由于數據源或者目標Java類的改變,你需要經常更新和重新編寫代碼。在這里我要介紹另一個解決方案,那就是使用映射,它通常使用更少的編碼,并且可以在目標Java類發(fā)生改變后更新自己。

  最初,我想介紹一個使用Reflection在運行期間配置數據的方案。在開始的時候,一個動態(tài)、基于映射的程序要比一個簡單的方法更有吸引力多了。隨后,我要揭示出運行時Reflection的復雜性和冒險性。這篇文章將介紹由運行時的Reflection到活動的代碼產生。

  由簡單到復雜

  我的第一個方案使用一個載入類將數據從一個文件載入到對象中。我的源代碼含有對StringTokenizer對象下一節(jié)點方法的多次調用。在修改多次后,我的編碼邏輯變得非常的直接、系統化。該類構造了專用的代碼。在這個初始方案中,我只需要使用3個基本的對象:

  1、Strings

  2、Objects

  3、Arrays of objects

  你可以影射類的對象來產生代碼塊,如下表所示:

  被影射來產生代碼塊的對象

Field typeCode blockStringfileIterator.nextString(); Object[]Vector collector = new Vector(); while(fileIterator.hasMoreDataForArray()){ Object data = initializeObject(fileIterator)collector.add(data); } Object[] objArray = new Object[collector.size()]; collector.copyInto(objArray); ObjectinitializeObject(fileIterator);                 **************表一**************

  我已經使用這個方案作了幾次編碼,因此我在寫代碼之前我已經知道該方案和代碼的結構。難點在于該類是變化的。類的名字、成份和結構在任何時候都可能發(fā)生變化,而任何的改變你都要重新編寫代碼。雖然會發(fā)生這些變化,但是結構和下載的流程仍然是一樣的;在寫代碼前,我仍然知道代碼的結構和成份。我需要一個方法,來將頭腦中的編碼流程轉換為一個可重用的、自動的形式。由于我是一個有效率的編程者,我很快就厭倦了編寫幾乎一樣的代碼,這時我想到了映射。

  數據配置通常需要一個源到目的數據的影射。影射可以是一個圖解、DTD(document type definition,文檔類型定義),文件格式等。在這個例子中,映射將一個對象的類定義解釋為我們要映射的流程。映射可以在運行時復制代碼的功能。在需要重寫代碼時,我將載入的過程用映射來代替,它所需要的時間和重寫是一樣的。

  載入的工程可以概括為以下幾步:

  1、解釋:一個影射決定你在構造一個對象時需要些什么

  2、請求數據:要滿足構造的需要,要進行一個調用來得到數據

  3、拖:數據由源中得到。

  4、推:數據被填充入一個對象的新實例

  5、假如必要的話,重復步驟1

  你需要以下的類來滿足以上的步驟:

  .數據類(Data classes):由ASCII文件中的數據實例化。類定義提供數據的影射。數據類必須滿足以下的條件:

  .它們必須包含有一個構造器來接收全部必需的參數,以使用一個有效的狀態(tài)來構造對象;

  .它們必須由對象構成,這些對象是reflective過程知道如何處理的

  .對象裝載器(Object loader):使用reflection和數據類作為一個影射來載入數據。產生數據請求。

  .載入治理器(Load manager):作為對象裝載器和數據源的中介層,將對數據的請求轉換為一個數據指定的調用。這可以令對象載入器做到與數據源無關。通過它的接口和一個可載入的類對象通信。

  .數據循環(huán)接口(Data iterator interface):載入治理器和載入類對象使用這個接口來由數據源中得到數據。

  一旦你創(chuàng)建了支持的類,你就可以使用以下的聲明來創(chuàng)建和影射一個對象:



發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 国产18视频| 免费在线看黄 | 杏美月av| 一级片九九| 玖草在线资源 | 精品国产乱码久久久久久久 | 中文字幕在线播放不卡 | 一本色道久久久888 香蕉视频99 | 亚欧美一区二区 | 小情侣嗯啊哦视频www | av电影直播| 久久精品a一级国产免视看成人 | 亚洲国产馆 | 日本网站在线播放 | 久久福利精品 | japan护士性xxxⅹhd | 国产精品一区在线观看 | 影视免费观看 | 欧美一级特黄a | 欧美人与禽性xxxxx杂性 | 久久国语对白 | 在线免费观看日韩视频 | 毛片a区 | 午夜网站视频 | 欧美aaaaa一级毛片在线 | 精品国产一区二区三区天美传媒 | 欧美福利视频一区二区 | 欧美a在线观看 | 免费h片| 国产精品成人一区二区三区电影毛片 | 亚洲免费视频一区二区 | 成人三级电影网站 | 精品国内视频 | 精品国产91久久久久久久 | 亚洲婷婷日日综合婷婷噜噜噜 | 久久久www免费看片 亚洲综合视频一区 | 久久99精品久久久久久秒播放器 | 曰韩一二三区 | 日本在线视频一区二区三区 | 蜜桃视频在线观看视频 | 毛片免费观看视频 |