JavaRush /Java блогы /Random-KK /Аннотациялар. Екінші бөлім. Ломбок

Аннотациялар. Екінші бөлім. Ломбок

Топта жарияланған
Аннотациялар. Бірінші бөлім, біраз қызықсыз. Бұл бөлімде мен Source 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 Бұлар ең типтік, бүкіл жиынды көруге болады. мұнда var және val ерекше назар аударуға лайық. Мынадай жазуға болады:
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();
Менің ойымша, бұл әрқашан қолайлы емес. Мысалы, бізде жаман картаны қайтаратын зұлым әдіс бар:
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