簡體   English   中英

在 Eclipse 中自動生成 toString 方法的快捷方式是什么?

[英]What are the shortcut to Auto-generating toString Method in Eclipse?

為一些簡單的類自動生成toString方法是好是壞?

我正在考慮生成類似下面的內容,它采用變量名稱並生成一個toString方法,該方法打印名稱后跟其值。

private String name;
private int age;
private double height;

public String toString(){
   return String.format("Name: %s Age: %d Height %f", name, age, height);
}

Eclipse 3.5.2(可能還有更早的版本)已經提供了這個特性。 如果您在編輯器中右鍵單擊,您將在 Source -> Generate toString()... 下找到它。

要回答您關於自動生成toString()是否是一種不好的做法的問題,我的觀點是它不是。 如果生成的代碼與您自己編寫的代碼非常相似,那為什么還要打字呢?

我個人喜歡為所有對象實現一個 toString 方法,因為它有助於調試。

我會考慮使用 Apache Commons ToStringBuilder

您可以使用反射實現一個簡單的 toString 方法,如下所示:

public String toString() {
   return ToStringBuilder.reflectionToString(this);
}

使用此方法,如果/何時添加字段,您將不必更新 toString 方法。

如果您使用的龍目島,他們有一個@ToString注釋,這將產生的toString你。

例如,使用 eclipse 生成 toString 而不是使用它更好的原因是,如果您稍后添加、刪除或更改類的屬性,您還必須重新生成 toString。 如果您使用lombok ,則不必這樣做。

添加到史蒂夫和唐的答案(他們+1):

使您的toString()方法簡單,確保它永遠不會觸發預期(尤其要注意可能為空的字段)。

如果可能,不要調用類的其他方法。 至少,請確保您的toString()方法不會修改您的對象。

並注意愚蠢的異常 toString 循環:

public class MyClass { 
       ... 
       public String toString() { 
          // BAD PRACTICE 1: this can throw NPE - just use field1
            return " field1=" + field1.toString() 
                + " extraData=" + getExtraData();
          // BAD PRACTICE 2: potential exception-toString loop
       }

       public MyExtraData getExtraData() {
           try { 
           .... do something
           } catch(Exception e) {
              throw new RuntimeException("error getting extradata - " + this.toString(),e);
           }

       }

}

在 IntelliJ Idea 中,您可以按 alt+insert,將打開 Generate 彈出窗口; 現在選擇字段並單擊確定按鈕; 就是這樣。

按 alt + 插入生成彈出窗口

選擇字段並保持默認模板不變

生成到字符串函數

進一步提示:在 Generate toString 對話框中,您可以通過單擊模板組合框上的下拉菜單來選擇模板。 如果需要,您可以在此處選擇 StringBuffer 或根據需要選擇任何其他模板。 玩它以適應它。 我喜歡 :)


生成 toString() 方法的快捷方式


  1. Alt + Shift + S + S (雙)
  2. 右鍵單擊-> 源 -> 生成 toString() ...
  3. 轉到源菜單-> 生成 toString() ...
  4. 轉到Windows 菜單-> 首選項 -> 常規 -> 鍵(在文本字段上寫入 Generate toString)

添加 toString() 時要明確生成文本的受眾。 一些框架使用 toString() 方法生成最終用戶可見的文本(例如某些 Web 框架),而許多人使用 toString() 方法生成調試/開發人員信息。 無論哪種方式,請確保您在 toString 實現中具有足夠的唯一性以滿足您的要求。

toString() 的默認 JDK 實現會生成開發人員信息,因此如果可能的話,這通常是我推薦的模式,但是如果您正在從事具有不同想法/期望的項目,您可能會感到困惑......

剛剛注意到 -在 NetBeans IDE 中,您可以通過選擇要生成的字段來生成 toString() 方法以進行right click->insert code或使用快捷方式ALT+INSERT然后選擇 toString()。

它的樣子是:

@Override
public String toString() {
    return "ClassName{"+"fieldName="+fieldName+'}';
}

這是調試的好方法,不需要額外的庫。

考慮到包括@Steve 在內的一些舊答案,我想根據最新的庫添加答案。

添加依賴

        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.10</version>
        </dependency>

在你的班級

import org.apache.commons.lang3.builder.ReflectionToStringBuilder;

public class User {
     ... 

     @Override
     public String toString() {
          return ReflectionToStringBuilder.toString(this);
     }
}

您可以排除某些字段,如下所示

    ... 
    @Override
    public String toString() {
        return ReflectionToStringBuilder.toStringExclude(this, "name"); // Name will be excluded from toString output 
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM