IntelliJ IDEA: простой способ создания безопасных типов без плагинов? - PullRequest
0 голосов
/ 25 января 2019

Используя IntelliJ IDEA, я хочу создать класс POJO, который поможет мне избежать глупых ошибок с точки зрения неправильного определения параметров.

  • Меня не волнуют другие IDE
  • Я не хочу использовать какую-либо форму отражения (т.е. никакой Ломбок или подобное)
  • Я неЯ не забочусь о «лучших практиках»

Я просто хочу создать класс, объявить некоторые поля и иметь удобный способ созданиякласс, который уменьшает вероятность того, что при создании класса я получу неправильные параметры одного типа.

Начиная с этого:

public class TestObject {
  public String x;
  public String y; 
}

Я хочу создать что-то, что я могу использоватьПримерно так:

TestObject o = new TestObject().setX("x").setY("y");

или вот так:

TestObject o = TestObjectBuilder.withX("x").withY("y").build();

Я не против, если есть отдельный класс конструктора (предпочитаю заклинить все методы исходного класса, но нетBiggie).

Я не против, если по пути будет много копий.Предпочитаю, если весь процесс создает только 1 экземпляр, как мое решение ниже;но если в решении используется неизменный подход «экземпляр-на-поле-установщик» - не важно.


Вот что я сейчас делаю для достижения этой цели.

(1) Используйте IDEA для Generate constructor, выбирая все поля, в результате чего:

public class TestObject {
  public String x;
  public String y;

  public TestObject(String x, String y) {
    this.x = x;
    this.y = y;
  }
}

(2) Refactor Constructor with Builder, необходимо выбрать Use existing, затем скопировать /вставьте имя TestObject в поле, потому что почему бы и нет, в результате чего:

public class TestObject {
  public String x;
  public String y;

  public TestObject(String x, String y) {
    this.x = x;
    this.y = y;
  }

  public TestObject setX(String x) {
    this.x = x;
    return this;
  }

  public TestObject setY(String y) {
    this.y = y;
    return this;
  }

  public TestObject createTestObject() {
    return new TestObject(x, y);
  }
}

(3) Удалите конструктор вручную (поскольку его наличие запрещает использование ctor по умолчанию)и удалите метод createTestObject () (поскольку это излишне, Java дает мне метод клонирования бесплатно).Оставляя меня с этой маленькой красавицей, и это все, чего я хотел в первую очередь:

public class TestObject {
  public String x;
  public String y;

  public TestObject setX(String x) {
    this.x = x;
    return this;
  }

  public TestObject setY(String y) {
    this.y = y;
    return this;
  }
}

Как насчет Оби-Вана, переполнения стека, есть ли способ сделать это с меньшим количеством пфаффинга?

Еще одна вещь, которую я хотел бы сделать, это добавить поля с меньшими затратами.Сейчас, когда я добавляю поле, я generate setter изменяю результат вручную, чтобы он соответствовал другим установщикам - есть ли лучший способ сделать это?

1 Ответ

0 голосов
/ 25 января 2019

Да, это возможно.

  1. Нажмите Alt-Insert (или «Код» -> «Создать»), чтобы открыть меню «Создать»
  2. Выберите Setter.
  3. В следующем окне выберите «Builder» в верхнем раскрывающемся меню «Шаблон» (по умолчанию это «intellij Default»).

Вы достигнете того же результата, что и вы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...