LINUX.ORG.RU

Добавить сахара в Java вдохновляясь Lombok

 


0

1

Понравился Lombok, идея классная, но сделан ныряшлево. Я тут подумал какую штуку можно сделать с Java пользуясь проторенными дорожками Lombok:

// - @Sugared включает кодогенерацию и уведомляет IDE плагин

// - @Equalable опционально, добавляет equals/hashCode и конструктор public Foo(String[] foo, String bar, Integer fooBar)

@Sugared @Equalable class Foo {
    
    // - все поля получают модифактор private, если у них пакетная
    // область видимости

    // - генерируется геттер и сеттер

    String[] foo;
    
    // - для Optional сеттер имеет вид
    // public void setBar(String bar) { this.bar = Optional.ofNullable(bar) }

    // - поле инициализируется Optional.empty()

    Optional<String> bar;
    
    // - создается только геттер метод

    @Getter
    Integer fooBar;

    // - методы с пакетной видимостью получают модификатор public

    static void main(String[] args) {
    }
    
    // - запрещаем кодогенерацию для данного метода, т.е. оставляем пакетную видимость

    @Unsugared
    void fooBar() {
    }
    
    // - явно задаем модификатор доступа

    private void barFoo() {
    }
    
    // @AllowNull создает методы с новыми сигнатурами:  variantArgs(String foo) { this.variantArgs(foo, null) }

    void variantArgs(String foo, @AllowNull Integer bar) {
    }
}
// - @Statical добавляет всем модификатор static

@Statical class Global {
    
    @Const
    String foo = "Foo"; // public static final
    
    // - добавляет private и static модификатор

    // - генерирует методы public bar(String bar) { Global.bar = bar } и public String bar() { return Global.bar }

    String bar;
    
    // добавляет static
    {
        bar = ""
    }

    void main(String[] args) {
    }
}
// - @Fork помещает ваш класс в пакет форкнутого класса

// - копирует все внутренности форкнутого класса, 
// позволяя работать с private и пакетной областью видимости, 
// при этом являясь его наследником

@Fork(com.alibaba.fastjson.JSON) class MyCoolJson {

    @Override
    private static byte[] allocateBytes(int length) {
        ...
    }
}
★★★★★

Последнее исправление: foror (всего исправлений: 2)

Ответ на: комментарий от Legioner

Он не несет супер фич, чтобы на него переходить с java, а подводных камней там наверняка куча.

Впрочем, я совсем забыл проверить рефакторинг, а на базе Lombok он не делается, в Eclipse просто переименовывается поле. А все внешние вызовы на сгенирированные методы остаются без изменений. Печалька.

foror ★★★★★
() автор топика
Ответ на: комментарий от foror

Переходи на темную сторону силы и пользуйся IDEA. У меня почему то вызовы методов переименовываются.

TheKnight ★★★
()
Ответ на: комментарий от foror

Он не несет супер фич

Всё, что ты перечислил, там есть и сделано нормально и удобно.

чтобы на него переходить с java

Переходить не обязательно, можно смешивать, он прекрасно взаимодействует с Java-кодом в обе стороны. Кроме того «переходить» это громко сказано. Если ты знаешь Java, достаточно потратить пару часов на чтение документации и начинать писать.

а подводных камней там наверняка куча

Как раз таки почти нет там подводных камней.

Legioner ★★★★★
()
Ответ на: комментарий от Legioner

Абсолютно поддерживаю. ТС походу юзает некро IDE и забывает, что при невежественной реализации подобных фич страдают все. Зато разработчик в шоколаде типа. Хрен там.
Взаправду приглянись к котлину

ii8_ ★★★★
()
Ответ на: комментарий от ii8_

Окей, уговорили, ща пойду Neon скачаю и попробую с kotlin-eclipse plugin. Заодно проверю пофиксили тормоза под GTK3.

foror ★★★★★
() автор топика
Последнее исправление: foror (всего исправлений: 1)

«Нинужно». Для этого есть остров в финском заливе.

znenyegvkby
()
Ответ на: комментарий от TheKnight

Да смысл менять ЯП ради того, чтобы он мне немного сахара добавил? Я уже думаю надо просто плагин к Eclipse дописать.

По кнопке над стандартным классом будет строить его «тень» и юзер в Eclipse будет видеть облегченную версию как с выше приведенной аннотацией @Sugarable/@Statical. А сам класс останется как есть и догенерирует новых гетеров, если добавят новое поле.

Я лучше потрачу время на изучение Rust, чем на изучение Kotlin.

foror ★★★★★
() автор топика
Последнее исправление: foror (всего исправлений: 3)
Ответ на: комментарий от foror

Как уже отметили итт, достаточно почитать доки по котлину и можно на нем уверенно писать. А язык очень и очень хорош. Ты не пожалеешь, начав изучать его. Зачем тебе насиловать жабу, если можно взять нормальный язык?

Unicode4all ★★★★★
()
Последнее исправление: Unicode4all (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.