CodeGym /Blog Java /Random-PL /Adnotacje. Część 2. Lombok
John Squirrels
Poziom 41
San Francisco

Adnotacje. Część 2. Lombok

Opublikowano w grupie Random-PL
Adnotacje. Część 1 — trochę nudno W tej części zdecydowałem się poruszyć kwestię biblioteki Lombok, gdyż jest ona dobrze znanym przedstawicielem adnotacji w kodzie źródłowym. Adnotacjami dotyczącymi środowiska wykonawczego zajmę się w następnym artykule. Adnotacje.  Część 2. Lombok - 1Dawno, dawno temu był sobie programista Java. Na co dzień pisała zwykły kod, na przykład taki:
package lombok;

public class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public Person() {
    }

    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;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Person person = (Person) o;

        if (age != person.age) return false;
        return name != null ? name.equals(person.name) : person.name == null;
    }

    @Override
    public int hashCode() {
        int result = name != null ? name.hashCode() : 0;
        result = 31 * result + age;
        return result;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
Ta klasa jest zwyczajna — tylko 2 pola (w końcu czasami jest ich więcej niż 10-15). Oczywiście wszystko to można wygenerować w IDE. Ale do cholery, to zajmuje swoje miejsce. Jeśli jest 15-20 pól, każde z nich potrzebuje getterów, setterów, konstruktorów... Spośród nich wszystkich kilka innych, niewidocznych dla oka metod, może łatwo zostać utracone. Jak pomóc temu programiście pisać szybciej i mniej? Lombok. Z patelni i w ogień z tobą. Oto ta sama klasa, ale teraz używamy Lomboka:
package lombok;

@Data
public class Person {
    private String name;
    private int age;
}
To wszystko. Fajne hę? Do czego służy adnotacja @Data ? Podczas kompilacji ta adnotacja generuje elementy pobierające/ustawiające dla wszystkich pól i zastępuje funkcje toString(), równości() i hashCode() zgodnie ze standardowymi regułami. Możesz zainstalować wtyczkę w IDE. Zobaczy wszelkie metody, które nie zostały jeszcze utworzone. Adnotacje.  Część 2. Lombok - 2W tym miejscu mam nadzieję, że zainteresowałeś się tym, mój czytelniku, ponieważ poniżej będzie krótkie wprowadzenie z linkami do szczegółów. Lombok pozwala także dostosować generowanie kodu, np. nie zawsze są potrzebne wszystkie moduły pobierające i ustawiające lub możesz potrzebować innego algorytmu do wygenerowania kodu skrótu. Aby to osiągnąć, istnieją osobne adnotacje (myślę, że wiele z nich nie będzie wymagało opisu): @Getter/@Setter, @ToString, @EqualsAndHashCode, @NoArgsConstructor, @RequiredArgsConstructor i @AllArgsConstructor, @Log Są to najbardziej wspólny. Cały zestaw można zobaczyć tutaj . Zwróć szczególną uwagę na var i val. Oznacza to, że możesz napisać taki kod:
package lombok;

import lombok.experimental.var;

@Data
public class Person {
    private String name;
    private int age;

    public static void main(String[] args) {
        var person = new Person();
        person.setAge(22);
        System.out.println(person);
    }
}
Dlaczego jest to konieczne? Na przykład mamy klasę RandomAccessFileChannel. Dlaczego mielibyśmy chcieć pisać taki kod?
RandomAccessFileChannel channel = new RandomAccessFileChannel();
Jeśli możemy to zrobić?
var channel2 = new RandomAccessFileChannel();
Moim zdaniem nie zawsze jest to akceptowalne. Na przykład mamy złą metodę, która zwraca złą mapę:
public static Map<List<Set<Integer>>, Set<List<String>>> evilMap() {
    return new HashMap<>();
}
Jeśli nazwiesz to tak:
Map<List<Set<Integer>>, Set<List<String>>> listSetMap = evilMap();
Wtedy jest mniej więcej jasne, z czym pracujemy. Jeśli wywołanie wygląda tak:
var listSetMap = evilMap();
wtedy tylko diabeł wie, co zwróci tam złaMap() i dopóki nie spojrzysz na samą metodę, nie wiesz. Po co biegać po plikach źródłowych? Ogólnie rzecz biorąc, trzeba z tym uważać. Oddział eksperymentalny: Tutaj chcę wspomnieć o adnotacji @UtilityClass . Tworzy prywatnego konstruktora, który zgłasza wyjątek (więc brudne małe rączki nie używają refleksji, aby się tam wtrącać). I jest to bardzo piękne na początku zajęć — mówi nam, że istnieją metody użytkowe. Adnotacja @Delegate implementuje wzorzec delegowania. Załóżmy, że masz klasę, która deleguje coś innej klasie i wprowadzasz zmiany tylko w niektórych metodach — ta adnotacja uchroni Cię przed duplikowaniem metod i będzie je śledzić. Jeśli usuniesz lub dodasz metodę, ta adnotacja zostanie zauważona. Oddział adnotacji eksperymentalnych GitHub Oficjalna strona Aby IDE poprawnie współpracowało z lombokiem i nie wyróżniało metod jako nieistniejących, należy zainstalować wtyczkę. Oficjalna strona internetowa zawiera sekcję konfiguracji , w której można zobaczyć, jak podłączyć wtyczkę dla każdego IDE. Jak widać lombok jest popularny: >5000 gwiazdek i >1000 widelców. Spring używa lomboka w swoich klasach. Jeśli masz w swoim projekcie Springa, spójrz – mógł pobrać lombok bez Twojej wiedzy.
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION