web-dev-qa-db-ja.com

EclipseでtoStringメソッドを自動生成するショートカットは何ですか?

いくつかの単純なクラスに対して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);
}
28
Gordon

Eclipse 3.5.2(およびおそらく以前のバージョン)はすでにこの機能を提供しています。エディター内で右クリックすると、ソース-> Generate toString()...にあります。

toString()を自動生成することは悪い習慣であるかどうかについてのあなたの質問に答えるために、私の意見はそうではないということです。生成されたコードが自分で作成したコードと非常に似ている場合、なぜそれを入力する必要があるのでしょうか。

43
Dónal

私は個人的には、デバッグに役立つように、すべてのオブジェクトに対してtoStringメソッドを実装するのが好きです。

Apache Commons ToStringBuilder の使用を検討します。

次のようにリフレクションを使用して、単純なtoStringメソッドを実装できます。

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

このメソッドを使用すると、フィールドが追加された場合にtoStringメソッドを更新する必要がなくなります。

33
Steve

lombok を使用する場合、to-Stringを生成する @ ToString アノテーションがあります。

たとえばEclipseでtoStringを生成する代わりにこれを使用する方がはるかに良い理由は、後でクラスの属性を追加、削除、または変更した場合、toStringも再生成する必要があるためです。 lombok を使用する場合、その必要はありません。

10
Shervin Asgari

スティーブとドンの回答に追加するには(+1)

toString()メソッドをシンプルにし、それが決してトリガーの期待をトリガーしないことを確認します(特にnullの可能性があるフィールドに注意してください)。

可能であれば、クラスの他のメソッドを呼び出さないでください。少なくとも、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);
           }

       }

}
5
leonbloy

IntelliJ Ideaでは、Alt + Insertを押すと、Generateポップアップが開きます。次に、フィールドを選択して[OK]ボタンをクリックします。それでおしまい。

Generate Popup by pressing alt + insert

Select Fields and keep the default template as such

the generated to string function

その他のヒント:[toStringの生成]ダイアログでは、テンプレートコンボボックスのドロップダウンをクリックしてテンプレートを選択することができます。ここでは、必要に応じてStringBufferを選択するか、必要に応じて他のテンプレートを選択できます。慣れるためにそれをいじってください。私はそれが好きです :)

2
Rajesh Goel

ToString()メソッドを生成するためのショートカット


  1. 押すAlt + Shift + S + S(ダブル)
  2. 右クリック->ソース-> Generate toString()...
  3. ソースメニュー-> toString()を生成します...
  4. Windowsメニュー-> Preferences-> General-> Keys(Generate toString on text field)に移動します
1
Deepak Gupta

ちょうど気づいた-NetBeans IDEの場合right click->insert codeに対して生成するフィールドを選択するか、ショートカットALT+INSERTを使用してtoString()メソッドを生成し、次にtoString()を選択します。

見た目は:

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

デバッグするための素晴らしい方法であり、追加のライブラリは必要ありません。

0
Tomas Bisciak

生成されたテキストの対象者に関してtoString()を追加するときは明確にしてください。一部のフレームワークはtoString()メソッドを使用してエンドユーザーに表示されるテキスト(特定のWebフレームワークなど)を生成しますが、多くの人はtoString()メソッドを使用してデバッグ/開発者情報を生成します。どちらの方法でも、toString実装に十分な一意性があり、要件を満たしていることを確認してください。

ToString()のデフォルトのJDK実装は開発者情報を生成するため、通常は可能であれば私が推奨するパターンですが、別のアイデア/期待でプロジェクトに取り組んでいる場合、混乱する可能性があります...

0
Will Iverson