Шаблон скорости для генерации пользовательского метода IntelliJ toString - PullRequest
0 голосов
/ 18 октября 2018

Учитывая класс

public class TestClass
{
    private static List<TestClass> tmp = new ArrayList<>();

    private String test1 = "";
    private String test2 = "";
    private String test3 = "";
}

Я пытаюсь определить пользовательский шаблон генерации кода IntelliJ, который создаст метод toString() в форме

public String toString()
{
    final String output = "%s{ test1[%s], test2[%s], test3[%s] }";

    return String.format(output, this.getClass().getSimpleName(), test1, test2, test3);
}

Iиметь следующий шаблон скорости, но вывод неправильный.

public java.lang.String toString() 
{
#set($i = 0)
final String output = "%s{ #foreach($member in $members)#if($i == 0)$member.accessor [%s]#else,$member.accessor [%s]#end#set($i = $i + 1)#end ";

return String.format(output, this.getClass().getSimpleName() #foreach($member in $members),$member.accessor #end); 
}

Вывод

public String toString()
{
    final String output = "%s{ test1 [%s],test2 [%s],test3 [%s] ";

    return String.format(output, this.getClass().getSimpleName(), test1, test2, test3);
}

Когда я пытаюсь добавить закрывающую скобку (}) в строку, шаблон-это не в состоянии сделать.

Я также не могу понять, как убрать пробел между каждым полем и его контейнером значений (квадратные скобки), и не могу понять, как добавить пробел после каждой запятой.Я проверил документацию по скорости Apache, но не нашел ничего, что можно было бы применить.

Я знаю, что мог бы использовать StringBuilder и собрать правильные элементы вместе, чтобы получить тот же результат.Однако теперь заставить работать шаблон Velocity с использованием вышеуказанного формата - это квест: -)

1 Ответ

0 голосов
/ 21 октября 2018

Вы можете использовать ${} вместо $ для доступа к переменным, и это поможет с пробелами:

final String output = "%s{ #foreach($member in $members)#if($i == 0)${member.accessor}[%s]#else, ${member.accessor}[%s]#end#set($i = $i + 1)#end ";
...