Lombok 基础

Lombok 基本注解

Lombok 高级注解

Lombok FAQ

lombok 扩展注解


Lombok 是一个 Java 库,它通过在编译时自动生成常用的 Java 代码,来减少 Java 代码中的冗余和样板代码。它提供了许多注解,可以用于自动生成 getter、setter、equals、hashCode 等方法,以简化 Java 类的编写。

除了 Lombok 提供的内置注解外,你还可以创建自定义的 Lombok 扩展注解,以满足特定项目或库的需求。下面是一个自定义 Lombok 扩展注解的示例,以及相关的详细内容。

假设你想要创建一个自定义的 Lombok 扩展注解 @ToStringAndUpperCase,该注解将生成一个 toString 方法,并将返回的字符串转换为大写。下面是示例代码:

首先,你需要创建一个 Java 类,用于定义 @ToStringAndUpperCase 注解:

import lombok.Data;
import lombok.ToString;
import lombok.core.AnnotationValues;
import lombok.core.HandlerPriority;
import lombok.core.AST.Kind;
import lombok.experimental.ExtensionMethod;
import lombok.spi.SpiHandler;
import lombok.spi.SpiLoadUtil;

@Data
@ToString
@ExtensionMethod(ToStringAndUpperCaseExtension.class)
public class ToStringAndUpperCase {
    private String name;
    private int age;

    @ToStringAndUpperCase
    public String nickname;
}

接下来,创建一个处理器类 ToStringAndUpperCaseExtension,该类实现了 Lombok 的 SpiHandler 接口,用于处理自定义注解的生成逻辑:

import com.sun.tools.javac.tree.JCTree;
import lombok.core.AST;
import lombok.core.AnnotationValues;
import lombok.core.HandlerPriority;
import lombok.spi.SpiHandler;
import lombok.spi.SpiLoadUtil;
import lombok.core.AnnotationValues;
import lombok.javac.JavacAnnotationHandler;
import lombok.javac.JavacNode;
import lombok.javac.JavacTreeMaker;

@HandlerPriority(4096)
public class ToStringAndUpperCaseExtension extends JavacAnnotationHandler<ToStringAndUpperCase> {
    @Override
    public void handle(AnnotationValues<ToStringAndUpperCase> annotation, JCTree.JCAnnotation ast, JavacNode annotationNode) {
        JavacNode parent = annotationNode.up();
        JavacTreeMaker maker = parent.getTreeMaker();

        if (parent.getKind() == Kind.FIELD) {
            JCTree.JCMethodDecl method = createToStringMethod(maker, annotationNode);
            parent.injectMethod(method);
        }
    }

    private JCTree.JCMethodDecl createToStringMethod(JavacTreeMaker maker, JavacNode node) {
        // 获取被注解的字段的名称
        String fieldName = node.getName();

        // 构建方法体,将字段的值转换为大写并返回
        String methodBody = "return \"" + fieldName + ": \" + this." + fieldName + ".toUpperCase();";

        // 构建方法
        return maker.MethodDef(
            maker.Modifiers(Flags.PUBLIC),
            node.toName("toString"),
            maker.TypeIdent(TypeTag.CLASS),
            List.nil(),
            List.nil(),
            List.nil(),
            maker.Block(0, List.of(maker.Return(maker.Exec(maker.parseExpression(methodBody))))),
            null
        );
    }
}

在上述代码中,我们首先创建了一个处理器类 ToStringAndUpperCaseExtension,它继承了 JavacAnnotationHandler 类。在 handle 方法中,我们处理了自定义注解的生成逻辑。如果注解应用在字段上,我们会生成一个新的 toString 方法,该方法返回字段值的大写字符串。

最后,确保在项目的构建工具(如 Maven 或 Gradle)中包含 Lombok 和你的自定义 Lombok 扩展注解的依赖,并启用 Lombok 注解处理器。

完成上述步骤后,你可以在你的 Java 类中使用 @ToStringAndUpperCase 注解,它将自动生成相应的 toString 方法,并将字段的值转换为大写。示例如下:

public class Main {
    public static void main(String[] args) {
        ToStringAndUpperCase person = new ToStringAndUpperCase();
        person.setName("John");
        person.setAge(30);
        person.setNickname("Johnny");

        System.out.println(person.toString()); // 输出结果: "name: JOHN, age: 30, nickname: JOHNNY"
    }
}

这就是一个自定义 Lombok 扩展注解的示例,它展示了如何创建一个自定义注解以生成自定义的代码。在实际项目中,你可以根据需求创建各种自定义 Lombok 扩展注解来简化代码编写。

Lombok是一个Java库,它通过注解来简化Java代码的编写,减少样板代码,提高代码的可读性和可维护性。xml`文件中添加以下依赖:创建 ...
Lombok(ProjectLombok)是一个Java库,它通过注解来简化Java代码的编写,减少样板代码,提高代码的可读性和可维护性。@ ...
Flask 通常被称为微框架,因为核心功能包括基于 Werkzeug 的 WSGI 和路由以及基于 Jinja2 的模板引擎。此外,Flas ...
Lombok是一个Java库,它通过注解简化了Java类的开发,其中包括生成常见的Java代码,如getter和setter方法、equal ...
Lombok是一个用于Java的开源项目,它通过注解来减少Java类中的样板代码,包括生成getter和setter方法、equals和ha ...