Как удалить Lombok API из вашего Java-кода - PullRequest
0 голосов
/ 14 декабря 2018

Я импортировал код из GitHub, подобный этому:

Файл 1: Settings.java

import lombok.Builder;
import lombok.Data;
import org.apache.pdfbox.pdmodel.font.PDFont;

@Data
@Builder
public class Settings {
    private PDFont font;
    private Integer fontSize;
    //code
}

Теперь это его использование

Файл 2:

private Settings settings = Settings.builder()
                               .font(DEFAULT_FONT)
                               .fontSize(DEFAULT_FONT_SIZE)
                               .build();

Пожалуйста, помогите мне преобразовать обе эти части в простой код. Я категорически не хочу использовать Lombok.

Ответы [ 6 ]

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

Вот ваш класс "Delombocked" Settings.

public class Settings {
    private PDFont font;
    private Integer fontSize;

    @java.beans.ConstructorProperties( {"font", "fontSize"})
    Settings(PDFont font, Integer fontSize) {
        this.font = font;
        this.fontSize = fontSize;
    }

    public static SettingsBuilder builder() {
        return new SettingsBuilder();
    }

    public PDFont getFont() {
        return this.font;
    }

    public Integer getFontSize() {
        return this.fontSize;
    }

    public void setFont(PDFont font) {
        this.font = font;
    }

    public void setFontSize(Integer fontSize) {
        this.fontSize = fontSize;
    }

    public boolean equals(final Object o) {
        if (o == this) {
            return true;
        }
        if (!(o instanceof Settings)) {
            return false;
        }
        final Settings other = (Settings) o;
        if (!other.canEqual((Object) this)) {
            return false;
        }
        final Object this$font = this.getFont();
        final Object other$font = other.getFont();
        if (this$font == null ? other$font != null : !this$font.equals(other$font)) {
            return false;
        }
        final Object this$fontSize = this.getFontSize();
        final Object other$fontSize = other.getFontSize();
        if (this$fontSize == null ? other$fontSize != null : !this$fontSize.equals(other$fontSize)) {
            return false;
        }
        return true;
    }

    protected boolean canEqual(final Object other) {
        return other instanceof Settings;
    }

    public int hashCode() {
        final int PRIME = 59;
        int result = 1;
        final Object $font = this.getFont();
        result = result * PRIME + ($font == null ? 43 : $font.hashCode());
        final Object $fontSize = this.getFontSize();
        result = result * PRIME + ($fontSize == null ? 43 : $fontSize.hashCode());
        return result;
    }

    public String toString() {
        return "Main.Settings(font=" + this.getFont() + ", fontSize=" + this.getFontSize() + ")";
    }

    public static class SettingsBuilder {
        private PDFont font;
        private Integer fontSize;

        SettingsBuilder() {
        }

        public Settings.SettingsBuilder font(PDFont font) {
            this.font = font;
            return this;
        }

        public Settings.SettingsBuilder fontSize(Integer fontSize) {
            this.fontSize = fontSize;
            return this;
        }

        public Settings build() {
            return new Settings(font, fontSize);
        }

        public String toString() {
            return "Main.Settings.SettingsBuilder(font=" + this.font + ", fontSize=" + this.fontSize + ")";
        }
    }
    //code
}
0 голосов
/ 14 декабря 2018

Вот полный пример с развернутым кодом.

public class Settings {
  private PDFont font;
  private Integer fontSize;
  private Settings(Builder builder) {
    this.font = builder.font;
    this.fontSize = builder.fontSize;
  }
  public PDFont getFont() {
    return this.font;
  }
  public void setFont(PDFont font) {
    this.font = font;
  }
  public Integer getFontSize() {
    return this.fontSize;
  }
  public void setFontSize(Integer fontSize) {
    this.fontSize = fontSize;
  }
  @Override public boolean equals(Object obj) {
    if (obj == this) return true;
    if (obj == null || obj.getClass() != getClass()) return false;
    Settings other = (Settings)obj;
    return java.util.Objects.equals(this.font, other.font)
        && java.util.Objects.equals(this.fontSize, other.fontSize);
  }
  @Override public int hashCode() {
    return Objects.hash(this.font, this.fontSize);
  }
  @Override public String toString() {
    return "Settings{font="+this.font+",fontSize="+this.fontSize+"}";
  }
  public static Builder builder() {
    return new Builder();
  }
  public static class Builder {
    PDFont font;
    Integer fontSize;
    private Builder() {
    }
    public Builder font(PDFont font) {
      this.font = font;
      return this;
    }
    public Builder fontSize(Integer fontSize) {
      this.fontSize = fontSize;
      return this;
    }
    public Settings build() {
      return new Settings(this);
    }
  }
  // Code  
}
0 голосов
/ 14 декабря 2018

Если я хорошо понимаю, что вам нужно сделать, это Delombok (с помощью плагина или командной строки), то скопируйте сгенерированный код (для сборщиков и т. Д.) В вашу кодовую базу.Что касается аннотации @Data, я предлагаю вам использовать функцию генерации вашей IDE

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

Проверьте их веб-сайт: Project Lombok

Существуют примеры и сравнения для каждой аннотации Lombok, в том числе для:

Вы можете проверить, какой код генерируется с помощью Lombok при использовании конкретной аннотации.Кроме того, есть также «Ванильная Ява» пример или, скорее, «С Ломбоком» против «Ванильная Ява» раздел.

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

Если вы используете IntelliJ и вы установили плагин Lombok, вы можете щелкнуть правой кнопкой мыши в вашем редакторе, перейти к Refactor и затем Delombok.Это работает по большей части, но иногда нет.Я бы не советовал вам делать это, это сделало бы код более уродливым и заставило бы вас включить проверку библиотеки как кода в вашем проекте, а не как зависимость.Просто используйте Lombok, это крутой плагин.

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

Поскольку в классе «Настройки» есть только два поля, вы можете создать конструктор, как показано ниже -

public class Settings {
  private PDFont font;
  private Integer fontSize;

  public Settings(PDFont font, Integer fontSize) {
    this.font = font;
    this.fontSize = fontSize;
  }

  public PDFont getPDFont() {
    return this.font;
  }

  public Integer getFontSize() {
    return this.fontSize;
  }
}

Использование -

private Settings settings = new Settings(DEFAULT_FONT, DEFAULT_FONT_SIZE);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...