Можно ли автоматически завершить сборку в Intellij? - PullRequest
0 голосов
/ 02 декабря 2018

Например, у меня есть класс с компоновщиком с 5 параметрами, вместо того, чтобы вручную выбирать параметры и заполнять их, есть ли способ сказать Intellij сделать это:

MyClass myClass = MyClass.builder()
                   .param1()
                   .param2()
                   .param3()
                   .param4()
                   .param5()
                   .build();

Тогда ямогу просто заполнить параметры самостоятельно.Было бы удобно убедиться, что я ничего не пропустил.
В качестве альтернативы, можно ли настроить параметры автозаполнения для сортировки в порядке их появления в классе?

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

Чтобы убедиться, что вы не пропустили ни одного параметра, вы можете использовать определенный вариант в шаблоне компоновщика.Я называю это «Именованные параметры»:

public final class MyClassBuilder {
    public static Param2 param1(String param1) {
        return param2 -> param3 -> param4 -> param5 -> new MyClass(
            param1, param2, param3, param4, param5
        );
    }
    public interface Param2 {
        Param3 param2(String value);
    }
    public interface Param3 {
        Param4 param3(int value);
    }
    public interface Param4 {
        Param5 param4(boolean value);
    }
    public interface Param5 {
        MyClass param5(Object value);
    }
}

Использование в таком случае выглядит следующим образом:

MyClass m = MyClassBuilder.param1("1")
                          .param2("2")
                          .param3(3)
                          .param4(false)
                          .param5(new Object());

С этим шаблоном компилятор (и любая IDE) будет принудительно устанавливать порядок параметров и вызыватьвсе они, как и любое промежуточное состояние, не позволяют получить результат.Он также не требует никакого дополнительного метода build (), так как последний параметр уже может возвращать результат.

Это немного больше кода, но я планирую создать генератор кода для него в моем проекте: https://github.com/c0stra/fluent-api-generator

0 голосов
/ 02 декабря 2018

Даже если такой плагин есть, я думаю, он вам не поможет (потому что вам все равно нужно вручную нажимать на каждый вызов метода и указывать параметр), и вам определенно не следует использовать IDE, чтобы защитить себя от не установки всех обязательных параметров..

В этом случае вы либо помещаете все обязательные параметры в конструктор, либо предоставляете проверку внутри метода build.Что-то вроде

public MyClass build() {
    if(param1 == null) {
        // handle param1 null value
    }
    if(param2 == null) {
       // etc
    }
    ...
}
...