JavaRush /Java блогу /Random-KY /Аннотациялар. Экинчи бөлүм. Ломбок

Аннотациялар. Экинчи бөлүм. Ломбок

Группада жарыяланган
Аннотациялар. Биринчи бөлүк, бир аз кызыксыз Бул бөлүктө мен булак annotationларынын белгилүү өкүлү катары Ломбок китепканасына токтолууну чечтим. Кийинки макалада Runtime annotationлары менен. Илгери бир Java программисти болгон, ал күн сайын кадимки codeду жазган, мисалы:
package lombok;

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

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

    public Chelovek() {
    }

    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;

        Chelovek chelovek = (Chelovek) o;

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

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

    @Override
    public String toString() {
        return "Chelovek{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
Бул 2 гана талаадан турган типтүү класс (бирок кээде 10-15тен ашык талаалар болот). Ооба, албетте, мунун бардыгы IDEде түзүлүшү мүмкүн, бирок ал мейкиндикти ээлейт. 15-20 талаа болсо, бардыгына гетер, сеттер, конструктор керек... Ушулардын арасында көзгө көрүнбөгөн дагы бир-эки ыкма оңой эле адашып кетет. Мындай программистке тезирээк жана азыраак жазууга кантип жардам бере алам? Ломбок. Түз эле ысыкта, ошол эле класс, бирок Ломбокту колдонуу:
package lombok;

@Data
public class Chelovek {
    private String name;
    private int age;
}
Ооба, баары ушул. Баракелде? @Data annotationсы эмне кылат ? Компиляция стадиясында ал бардык талаалар үчүн алгычтарды/жөндөөчүлөрдү жаратат, toString жана стандарттарга ылайык барабарларды жана hashCodeду кайра аныктайт. Сиз IDEге плагинди орното аласыз жана ал түзүлө элек бардык ыкмаларды көрөт.
Аннотациялар.  Экинчи бөлүм.  Ломбок - 1
Сизге, окурманга, бул кызыктуу болду деп үмүттөнөм, анткени төмөнкү кыскача киришүү жана майда-чүйдөсүнө чейин шилтемелер. Lombok ошондой эле генерацияны ыңгайлаштыруу мүмкүнчүлүгүн берет; бардык алуучулар, орнотуучулар же хэшcodeдор ар дайым башкача түзүлүшү керек эмес. Ошондуктан, өзүнчө annotationлар бар (менин оюмча, алардын көбү сыпаттамага муктаж эмес) @Getter/@Setter @ToString @EqualsAndHashCode @NoArgsConstructor, @RequiredArgsConstructor жана @AllArgsConstructor @Log Булар эң типтүүлөрү, бүт комплексти көрүүгө болот. бул жерде вар жана вал өзгөчө көңүл бурууга татыктуу. Мындай жазууга болот:
package lombok;

import lombok.experimental.var;

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

    public static void main(String[] args) {
        var chelovek = new Chelovek();
        chelovek.setAge(22);
        System.out.println(chelovek);
    }
}
Бул эмне үчүн керек? Мисалы, бизде RandomAccessFileChannel классы бар. Эмне үчүн биз аны минтип жазышыбыз керек:
RandomAccessFileChannel channel = new RandomAccessFileChannel();
Мүмкүн болсо мындай:
var channel2 = new RandomAccessFileChannel();
Менимче, бул дайыма эле кабыл алынbyte. Мисалы, бизде жаман картаны кайтарган жаман ыкма бар:
public static Map<List<Set<Integer>>, Set<List<String>>> evilMap(){
    return new HashMap<>();
}
эгер сиз муну мындай деп атасаңыз:
Map<List<Set<Integer>>, Set<List<String>>> listSetMap = evilMap();
Эмне менен иштеп жатканыбыз аздыр-көптүр түшүнүктүү. Чалуу мындай болсо:
var listSetMap = evilMap();
анда evilMap() эмнени кайтарарын ким билет жана методдун өзүн карамайынча, билбей каласыз. Булактарды карап чыгуунун эмне кереги бар? Жалпысынан алганда, бул менен көбүрөөк сак болушу керек. Эксперименттик жип: Бул жерде annotationларды белгилегим келет: @UtilityClass Ал жеке конструкторду жаратат жана ал жакка өзгөчө учурду ыргытат (чагылышуудан булганган колдор бул жерге кирбеши үчүн). Ал эми класстын башталышында пайдалуу ыкмалар бар экенин абдан сонун айтат. @Delegate Делегация үлгүсүн ишке ашырат. Эгер сизде бир нерсени башка класска өткөрүп берген класс болсо, кээ бир методдорго гана өзгөртүү киргизген болсо, бул annotation сизди ыкмаларды кайталоодон сактап калат + аларга көз салып турат. Эгерде кандайдыр бир ыкма алынып салынса же кошулса, ал аны байкайт. Эксперименталдык annotationлар жип GITHUB Расмий веб-сайты IDE lombok менен нормалдуу иштеши үчүн жана методдорду жок деп бөлүп көрсөтпөө үчүн, плагинди орнотуу керек. Расмий веб-сайтта ар бир IDE үчүн плагинди кантип туташтыруу керектигин көрө турган орнотуу бөлүмү бар.Көрүп тургандай, Lombok популярдуу. >5000 жылдыз жана >1000 айры. Жаз өз сабактарында ломбокту колдонот. Долбооруңузда булак бар болсо, аны издеңиз, балким, ал ломбокту тартып алгандыр, сиз жөн гана билбейсиз.
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION