2016-03-11 9 views
6

Ich will IntelliJ Idea Vorlage erstellen für toString Methode String.format anstelle der Verkettung, StringBuffer usw.IntelliJ Idea Vorlage für toString Methode String.format statt Verkettung

Zum Beispiel habe ich folgendes Objekt:

public class Foo { 
    private int id; 
    private String name; 
    private List<String> values; 
} 

Wenn ich generieren toString für alle Felder standardmäßig Idee generieren:

@Override 
public String toString() { 
    return "Foo{" + 
      "id=" + id + 
      ", name='" + name + '\'' + 
      ", values=" + values + 
      '}'; 
} 

Aber ich möchte folgendes erzeugen:

@Override 
public String toString() { 
    return String.format("Foo(id=%d, name=%s, values=%s)", id, name, values); 
} 
+0

Sie sollten vorsichtig damit sein. Obwohl String.format besser lesbar ist, hat es eine sehr schlechte Leistung im Vergleich zur altmodischen Verkettung mit +. –

Antwort

8

Für alle noch für diese Suche:

public java.lang.String toString() { 
return String.format(
"$classname (## 
#set ($i = 0) 
#foreach ($member in $members) 
#if ($i != 0)## 
, ## 
#end 
$member.name=%s## 
#set ($i = $i + 1) 
#end 
)",## 
#set ($i = 0) 
#foreach ($member in $members) 
    #if ($i != 0) 
    ,## 
    #end 
    #if ($member.primitiveArray || $member.objectArray) 
    java.util.Arrays.toString(this.$member.name)## 
    #else 
    this.$member.name ## 
    #end 
    #set ($i = $i + 1) 
#end 
); 
} 

Angepasst von this template.

+0

Ehrfürchtig. Danke @Linuslabo! –

+0

@linuslabo was machen wir genau mit diesen Vorlagen? – anon58192932

+0

@ anon58192932 Sie können in Ihrer Klasse eine 'toString'-Methode erzeugen, die das' String.format' verwendet (genau wie von der Frage angefordert). Werfen Sie einen Blick auf [Intellij docs] (https://www.jetbrains.com/help/idea/2016.3/generating-tostring.html). – Linuslabo

Verwandte Themen