2016-03-11 14 views
6

Chcę utworzyć szablon IntelliJ Idea dla toString metody wykorzystującej String.format zamiast konkatenacji, StringBuffer itpIntelliJ Idea szablon dla metody toString wykorzystaniem string.Format zamiast konkatenacji

Na przykład mam następujący obiekt:

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

Gdybym generować toString dla wszystkich pól domyślnie pomysł będzie generować:

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

Ale chcę, aby wygenerować następujący:

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

Powinieneś być ostrożny z tym. Mimo że String.format jest bardziej czytelny, ma bardzo słabą wydajność w porównaniu ze staroświecką konkatenacją z +. –

Odpowiedz

8

Dla nikogo wciąż szuka tego:

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 
); 
} 

Adaptacja this template.

+0

Awesome. Dziękuję @Linuslabo! –

+0

@linuslabo co dokładnie robimy z tymi szablonami? – anon58192932

+0

@ anon58192932 Możesz wygenerować metodę 'toString' w swojej klasie, która używa' String.format' (tak jak żądane przez pytanie). Spójrz na [Intelliwiści] (https://www.jetbrains.com/help/idea/2016.3/generating-tostring.html). – Linuslabo