JavaRush /Java Blog /Random-TL /Aklatan ng Lombok
Сергей
Antas
Москва

Aklatan ng Lombok

Nai-publish sa grupo
Binabawasan ng Lombok library ang dami ng nakasulat na code, na pinapabuti ang pagiging madaling mabasa. Aklatan ng Lombok - 1Halimbawa ng paggamit. Isang regular na klase Personna may tatlong field:
public class Person {

    private String name;
    private int age;
    private Cat cat;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Cat getCat() {
        return cat;
    }

    public void setCat(Cat cat) {
        this.cat = cat;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Person person = (Person) o;
        return age == person.age &&
                Objects.equals(name, person.name) &&
                Objects.equals(cat, person.cat);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age, cat);
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", cat=" + cat +
                '}';
    }
}
Parehong bagay sa lombok
@Data
public class Person {
    private String name;
    private int age;
    private Cat cat;
}
Inalis namin ang isang grupo ng code, gayunpaman, nanatili ang lahat ng mga pamamaraan at modifier. Paano ito gumagana. Ang Lombok ay bumubuo ng code sa oras ng pag-compile. Ang lombok library mismo ay nawawala sa runtime. Ang paggamit nito ay hindi nagpapataas ng laki ng programa. Kapag gumagamit ng Lombok, ang aming source code ay hindi magiging wastong Java code. Samakatuwid, kakailanganin mong mag-install ng isang plugin para sa IDE, kung hindi, hindi mauunawaan ng kapaligiran ng pag-unlad kung ano ang kinakaharap nito. Sinusuportahan ng Lombok ang lahat ng pangunahing Java IDE. Walang putol ang pagsasama. Ang lahat ng mga function tulad ng "ipakita ang paggamit" at "pumunta sa pagpapatupad" ay patuloy na gumagana tulad ng dati, na dadalhin ka sa naaangkop na field/klase. Kaya, para sa mga simpleng klase maaari mong gamitin ang anotasyon @Data. @Data- bumubuo ng constructor, getter, setter, method equals, hashCode, toString. Upang gawing hindi nababago ang mga bagay mayroong @Value. @Value- bumubuo ng constructor, mga getter lamang, pamamaraan equals, hashCode, toString. At ginagawa din ang lahat ng mga patlang privateat final.
@Value
public class Cat {
    String name;
    int age;
    Person person;
}
@WithMga anotasyon at .gumana nang maayos sa mga hindi nababagong klase @Builder.
@With
@Builder
@Value
public class Cat {
    String name;
    int age;
    Person person;
}
Kung gusto nating baguhin ang field ng isang hindi nababagong object, kailangan nating gumawa ng clone ng object na ito na may isang binagong parameter. @With- nagdaragdag ng mga pamamaraan para sa bawat field na gumagawa ng clone ng object na may isang binagong field.
Cat anotherCat = cat.withName("Vasya");
anotherCat- isang bagong bagay na ang mga halaga ng field ay kapareho ng sa cat, maliban sa field name. @Builder- bumubuo ng mga pamamaraan kung saan sinisimulan natin ang isang bagay sa isang chain. Ito ay maginhawa kapag hindi namin nais na gumamit ng isang constructor na may lahat ng mga parameter (Kung ang aming klase ay hindi nababago, pagkatapos ay mayroon itong isang solong konstruktor na may lahat ng mga parameter).
Cat cat = Cat.builder()
                .name("Мурка")
                .age(3)
                .person(person)
                .build();
Paikot na tawag ng mga pamamaraan Kung ang mga bagay ay may bidirectional na komunikasyon, i.e. mga sanggunian sa isa't isa, pagkatapos ay ang paggamit ng mga pamamaraan toStringay equalshahantong hashCodesa isang error StackOverflowError. kasi magkakaroon ng paikot na tawag sa mga pamamaraan ng mga nested na bagay. Ang code na ito ay magreresulta sa isang error:
public class Main {

    public static void main(String[] args) {
        Person person = new Person();

        Cat cat = Cat.builder()
                .name("Мурка")
                .age(3)
                .person(person)
                .build();

        person.setName("Ivan");
        person.setAge(26);
        person.setCat(cat);

        System.out.println(person);
        System.out.println(cat);
    }
}
Ang solusyon sa problema ay upang masira ang paikot na tawag sa pamamagitan ng pag-alis ng field mula sa pamamaraan. @ToString.Exclude- Ibukod ang isang field sa isang paraan toString @EqualsAndHashCode.Exclude- Ibukod ang isang field sa isang paraan equalsathashCode
@Value
@With
@Builder
public class Cat {
    String name;
    int age;
    @ToString.Exclude
    @EqualsAndHashCode.Exclude
    Person person;
}
Ang ilang mas kapaki-pakinabang na mga anotasyon @Slf4j- nagdaragdag ng isang logger sa klase @SneakyThrows- ginagawang walang check ang mga may check na exception
@Slf4j
public class Main {

    @SneakyThrows
    public static void main(String[] args) {
        log.info("start");
        Files.readAllBytes(Paths.get(""));
    }
}
Mag-annotate nang paisa-isa Kung sa ilang kadahilanan kailangan mo lamang ng ilang mga pamamaraan
@NoArgsConstructor //добавляет конструктор без аргументов
@AllArgsConstructor //добавляет конструктор со всеми параметрами
@RequiredArgsConstructor //добавляет конструктор для final полей
@Getter //добавляет геттеры для всех параметров класса
@Setter //добавляет сеттеры для всех параметров класса
@EqualsAndHashCode //добавляет реализации методов equals и hashCode
@ToString //добавляет реализацию метода toString
@FieldDefaults(level = AccessLevel.PRIVATE, makeFinal = true) //делает все поля private и final
Aklatan ng Lombok - 2<h2>Konklusyon</h2>Ito ang mga pangunahing anotasyon ng lombok, ngunit ang mga ito ang pinakakaraniwang ginagamit at may pinakamalaking epekto. Hindi ka rin dapat madala sa pagbuo ng code. <h2>Mga Link</h2>
Mga komento
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION