Понравился 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) {
...
}
}