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

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

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

    J2EE社區(qū)

    茍有恒,何必三更起五更眠;
    最無益,只怕一日曝十日寒.
    posts - 241, comments - 318, trackbacks - 0, articles - 16

    問題

      在維持能控制其輸出,內(nèi)容和格式時(shí)才需要自定義toString()


        jakarta commons  commons-lang-2.4.jar提供功能
        

        1、ReflectionToStringBuilder.reflectionToString(this);   或者其它的ReflectionToStringBuilder.toString(..).;
              
         2、在提供ReflectionToStringBuilder的同時(shí),Commons Lang也通過ToStringBuilder和ToStringStyle類提供了定制功能.  可以通過傳給ToStringBuilder類一個(gè)ToStringStyle對(duì)象來定制.下面的示例實(shí)現(xiàn)了一個(gè)即定制了樣式又定制了內(nèi)容的 toString()方法:
      
      import org.apache.commons.lang.builder.ToStringBuilder;
      import org.apache.commons.lang.builder.ToStringStyle;
      
      public String toString(){
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE).
          append("lastName",lastName).
          append("firstName",firstName).
          toString();
      }
      
      上述toString()方法只輸出由append()參數(shù)指定的那兩個(gè)屬性.如下所示:
      
      com.dscursive.jccook.lang.builders.PoliticalCandidate@1cd2e5f[
        lastName=Jefferson
        firstName=Thomas
      ]
      使用反射生成toString()的內(nèi)容有利于節(jié)省時(shí)間,但這樣做只能全部輸出該類的成員變量.如果想輸出指定的幾個(gè)變量怎么辦?
      如果類里面的一些內(nèi)容不便輸出呢?此外,一個(gè)對(duì)象可能有很多屬性,或者某個(gè)屬性含有大量的文本內(nèi)容.在這種情況下,使用
      ReflectionToStringBuilder輸出類中每個(gè)變量是不可行的.
      
      使用ToStringBuilder時(shí),可借助ToStringStyle類的靜態(tài)成員來定制輸出內(nèi)容.ToStringBuilder的構(gòu)造函數(shù)接受一個(gè)對(duì)象實(shí)例
      和一個(gè)ToStringStyle樣式作為參數(shù),返回一個(gè)ToStringBuilder類實(shí)例.該生成器接著通過append()被定制,append()方法指定
      哪些屬性會(huì)被輸出.定制ToStringBuilder時(shí),你需要手動(dòng)添加各個(gè)屬性到生成器實(shí)例中.append()方法可以接受所有基本類型,
      對(duì)象和數(shù)組.
      如:
      append(int value)                添加整數(shù)值
      append(String n,int value)           添加整數(shù)值和屬性名
      append(Object value)              添加對(duì)象的toString()方法
      append(String n,Object value)          添加對(duì)象的toString()方法和屬性名
      append(int[] array)               添加格式化后的數(shù)組內(nèi)容
      append(Object[] array)             
      append(String n,int[] array)          添加屬性名和數(shù)組大小
      append(String n,Object[] array) 
      append(String n,int[] array,boolean detail)   添加屬性名和數(shù)組全部?jī)?nèi)容.
      
      ToStringStyle類提供了對(duì)ToStringBuilder類輸出進(jìn)行定制的機(jī)制,同時(shí)也提供幾種內(nèi)建樣式.ToStringStyle.
      MULTI_LINE_STYLE是這些樣式之一,其作用是在每?jī)蓚€(gè)屬性之間插入換行符.另一個(gè)例子是ToStringStyle.
      SIMPLE_STYLE,它的作用是簡(jiǎn)單地輸出每個(gè)變量的值.下面每個(gè)內(nèi)置樣式都提供了一個(gè)示例:
      
      ToStringStyle.DEFAULT_STYLE
      com.discursive.jccook.lang.builders.PoliticalCandidate@1cd2e5f[lastname=Jefferson,firstname=Thomas]
      
      ToStringStyle.MULTI_LINE_STYLE
      com.discursive.jccook.lang.builders.PoliticalCandidate@1cd25f[
        lastName=Jefferson
        firstName=Thomas
      ]
      
      ToStringStyle.NO_FIELD_NAMES_STYLE
      com.discursive.jccook.lang.builders.PoliticalCandidate@icd2e5f[Jefferson,Thomas]

     

     

      ToStringStyle.SIMPLE_STYLE
      Jefferson,Thomas
      
      
      對(duì)toString()方法而言最重要的是什么?一是準(zhǔn)確,二是要緊緊跟上不斷變化的系統(tǒng)內(nèi)容.任何實(shí)用的錯(cuò)誤信息里都帶有顯示出錯(cuò)
      對(duì)象內(nèi)容的文本信息.出現(xiàn)異常時(shí),只要打印出對(duì)象的值,往往就能很容易知道是什么地方引起異常.在缺日志系統(tǒng)的情況下,離開調(diào)試
      器就幾乎無法調(diào)試程序,尤其是在診斷一個(gè)只影響很少人的罕見問題,而這個(gè)問題只有在特定場(chǎng)景下執(zhí)行特定的操作才會(huì)碰到.這時(shí),
      最好能知道和錯(cuò)誤相關(guān)的每個(gè)對(duì)象的內(nèi)部狀態(tài),而toString()方法是顯示這些信息的最簡(jiǎn)便辦法.自動(dòng)生成toString()方法會(huì)使你的
      錯(cuò)誤提示信息更有意義.

    測(cè)試代碼 復(fù)制代碼
    1. package test2;   
    2.   
    3. import org.apache.commons.lang.builder.ToStringBuilder;   
    4. import org.apache.commons.lang.builder.ToStringStyle;   
    5.   
    6. /**   
    7.  * 用Commons Lang組件實(shí)現(xiàn)自定義toString()方法   
    8.  * @author fhd001   
    9.  */   
    10. public class ToStringTest2 {   
    11.   
    12.     public static void main(String[] args) {   
    13.   
    14.         Student1 stu1 = new Student1();   
    15.         stu1.setAddress("湖北");   
    16.         stu1.setName("李小龍");   
    17.         stu1.setAge(60);   
    18.            
    19.         System.out.println(stu1.toString());   
    20.     }   
    21. }   
    22.   
    23. class Student1{   
    24.        
    25.     private String name;   
    26.     private int age;   
    27.     private String address;   
    28.        
    29.     public void setName(String name) {   
    30.         this.name = name;   
    31.     }   
    32.     public void setAge(int age) {   
    33.         this.age = age;   
    34.     }   
    35.     public void setAddress(String address) {   
    36.         this.address = address;   
    37.     }   
    38.     public String getName() {   
    39.         return name;   
    40.     }   
    41.     public int getAge() {   
    42.         return age;   
    43.     }   
    44.     public String getAddress() {   
    45.         return address;   
    46.     }   
    47.        
    48.     @Override   
    49.     public String toString() {   
    50.   
    51.         /*   
    52.          * 這里用ToStringBuilder,ToStringStyle類重寫toString()方法   
    53.          */   
    54.         return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)   
    55.                 .append("name",name).append("address",address).toString();   
    56.     }   
    57. }  

      

    結(jié)果代碼

  • test2.Student1@a62fc3[   
  •   name=李小龍   
  •   address=湖北   
  • ]  


  • 轉(zhuǎn)載于http://www.tkk7.com/xcp/admin/EditPosts.aspx?opt=1


    名稱: ?4C.ESL | .↗Evon
    口號(hào): 遇到新問題?先要尋找一個(gè)方案乄而不是創(chuàng)造一個(gè)方案こ
    mail: 聯(lián)系我


    主站蜘蛛池模板: 色婷婷亚洲十月十月色天| 午夜成年女人毛片免费观看| 国产精品国产亚洲精品看不卡| 国产免费拔擦拔擦8X高清在线人| 亚洲ts人妖网站| 国产亚洲一区区二区在线| 国产福利在线免费| 久久免费视频99| jizz免费观看视频| 亚洲国产aⅴ成人精品无吗| 久久久久亚洲AV片无码| 亚洲成?v人片天堂网无码| 无人影院手机版在线观看免费 | 综合偷自拍亚洲乱中文字幕| 亚洲熟女少妇一区二区| 亚洲国产成人精品久久久国产成人一区二区三区综 | 老司机永久免费网站在线观看| 99蜜桃在线观看免费视频网站| 久久九九免费高清视频| 亚洲免费日韩无码系列| 日韩免费码中文在线观看| 曰批免费视频播放免费| 亚洲成熟丰满熟妇高潮XXXXX| 亚洲精品午夜国产va久久| 亚洲午夜久久久久久尤物| 亚洲精品无码久久久久久久| 亚洲AV人人澡人人爽人人夜夜| 亚洲va在线va天堂va不卡下载| 亚洲国产精品免费视频| 亚洲宅男永久在线| 亚洲AV无码乱码在线观看代蜜桃| 亚洲国产精品综合久久20| 亚洲精品一卡2卡3卡四卡乱码| 国产亚洲精品免费| 亚洲免费观看视频| 黄色成人网站免费无码av| 亚洲色一色噜一噜噜噜| 91亚洲va在线天线va天堂va国产| 亚洲色偷偷色噜噜狠狠99网| 无人视频在线观看免费播放影院| 久久精品无码精品免费专区|