激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

香港云服务器
服務器之家 - 編程語言 - Java教程 - Java toString方法重寫工具之ToStringBuilder案例詳解

Java toString方法重寫工具之ToStringBuilder案例詳解

2021-12-06 12:45vince_zw Java教程

這篇文章主要介紹了Java toString方法重寫工具之ToStringBuilder案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下

apache的commons-lang3的工具包里有一個ToStringBuilder類,這樣在打日志的時候可以方便的打印出類實例中的各屬性的值。

具體用法如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
 
public class Message {
 
    private String from;
 
    private String to;
 
    private String body;
 
    public String getFrom() {
        return from;
    }
 
    public void setFrom(String from) {
        this.from = from;
    }
 
    public String getTo() {
        return to;
    }
 
    public void setTo(String to) {
        this.to = to;
    }
 
    public String getBody() {
        return body;
    }
 
    public void setBody(String body) {
        this.body = body;
    }
 
    @Override
    public String toString() {
        return ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE);
    }
    
    public static void main(String[] args) {
        Message msg = new Message();
        msg.setFrom("vince");
        msg.setTo("mike");
        msg.setBody("hello");
        System.out.println(msg.toString());
    }
}

而且支持多種打印格式

多行輸出的:

com.vince.im.dto.Message@af72d8[
from=vince
to=mike
body=hello
]

默認一行的:

com.vince.im.dto.Message@af72d8[from=vince,to=mike,body=hello]

NO_FIELD_NAMES_STYLE:

com.vince.im.dto.Message@af72d8[vince,mike,hello]

SHORT_PREFIX_STYLE:

Message[from=vince,to=mike,body=hello]

SIMPLE_STYLE:

vince,mike,hello

原理其實就是通過JAVA的reflect(反射)獲取值,然后組成一個Buffer。

里面部分源碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/**
 * <p>Append to the <code>toString</code> the start of data indicator.</p>
 * 拼裝結果的
 * @param buffer  the <code>StringBuffer</code> to populate
 * @param object  the <code>Object</code> to build a <code>toString</code> for
 */
public void appendStart(final StringBuffer buffer, final Object object) {
    if (object != null) {
        appendClassName(buffer, object);
        appendIdentityHashCode(buffer, object);
        appendContentStart(buffer);
        if (fieldSeparatorAtStart) {
            appendFieldSeparator(buffer);
        }
    }
}
 
/**
 * <p>Append the {@link System#identityHashCode(java.lang.Object)}.</p>
 * 拼裝對象hashcode
 * @param buffer  the <code>StringBuffer</code> to populate
 * @param object  the <code>Object</code> whose id to output
 */
protected void appendIdentityHashCode(final StringBuffer buffer, final Object object) {
    if (this.isUseIdentityHashCode() && object!=null) {
        register(object);
        buffer.append('@');
        buffer.append(Integer.toHexString(System.identityHashCode(object)));
    }
}

需要注意的是:

Builds a toString value using the default ToStringStyle through reflection.

It uses AccessibleObject.setAccessible to gain access to private fields. This means that it will throw a security exception if run under a security manager, if the permissions are not set up correctly. It is also not as efficient as testing explicitly.

Transient members will be not be included, as they are likely derived. Static fields will not be included. Superclass fields will be appended.

也就是說transient和static修飾的屬性不能打印出來,但是父類的是可以打印出來的,使用的時候一定要注意了。

到此這篇關于Java toString方法重寫工具之ToStringBuilder案例詳解的文章就介紹到這了,更多相關Java toString方法重寫工具之ToStringBuilder內容請搜索服務器之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/zhaowen25/article/details/39521899

延伸 · 閱讀

精彩推薦
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發(fā)現了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7482021-02-04
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網2942020-09-17
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數據的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經有好久沒有升過級了。升級完畢重啟之后,突然發(fā)現好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩(wěn)中求8032021-07-12
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發(fā)項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
1000
主站蜘蛛池模板: 毛片国产 | 大奶一级片 | 91中文在线观看 | 午夜在线成人 | 涩涩伊人 | 国产免费观看一区二区三区 | 亚洲人成中文字幕在线观看 | 欧美精品欧美 | 天天草天天干天天射 | 欧美视频国产精品 | 欧美成网| 久在线观看| 国产亚洲激情 | 欧美精品videos | 肉文女配h | 日韩精品中文字幕一区二区三区 | 在线视频观看成人 | 国产精品免费小视频 | 精品国产91久久久久久久 | 欧美 国产 综合 | 中国女警察一级毛片视频 | 极品大长腿啪啪高潮露脸 | 亚洲国产精品一区二区精品 | 久久艹逼| 久久成人视屏 | 99国产精品白浆在线观看免费 | 免费国产不卡午夜福在线 | 欧美日韩一区,二区,三区,久久精品 | 欧美高清另类自拍视频在线看 | 亚洲第一精品在线 | 青青操国产 | 九九热精品视频在线 | 黄色网址免费入口 | 香蕉国产在线视频 | 精品伊人 | 久久精品视频免费观看 | 高清在线国产 | 色无极影院亚洲 | 久久久久久久久久一本门道91 | 黄污网站在线 | 56av国产精品久久久久久久 |