關於IDEA在debug時私自調用toString()方法的問題

1,IDEA在debug時,當debug到某個對象時,會調用對象的toString()方法,用來在debug界面顯示對象信息。

2,IDEA調用toString()方法時,即使在toString()方法中設置了斷點,該斷點也不會被觸發,也就是說,開發者多數情況下不會知道toString()方法被調用了。

3,多數情況下調用一下toString()方法沒有什麼問題,但是也有例外,比如重寫了toString()方法的類,隨意的調用toString()方法會導致未知的問題。

4,比如Dubbo的AbstractConfig類,對這個類的debug會導致其子類ReferenceConfig的initialized屬性錯誤的被修改爲true,進而無法正確的生成Dubbo代理。

5,IDEA在debug時調用toString()方法的情況是可以在配置中關掉的,配置位置是:

紅框的對號去掉就可以了。

 

下面是一個實例,驗證了IDEA的這個問題:

一個測試類,重寫了toString()方法,添加了額外的日誌輸出:

public class DebugBean {
    private int id;
    private String name;

    @Override
    public String toString() {
        System.out.println("調用toString()");
        return super.toString();
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

然後是測試類:

public class Test {
    public static void main(String[] args){
        System.out.println("begin");
        DebugBean debugBean=new DebugBean();
        debugBean.setId(123);

        System.out.println("end");
    }
}

debug啓動後的結果如下圖:

說明確實調用了toString()方法。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章