java - 如何在 Lombok 注释处理程序中获取 super 字段

标签 java lombok

我想修改Lombok @ToString 的格式,使其表现得像IDEA 生成的toString 代码。没有可用的选项,所以我尝试修改 Lombok 源代码 lombok.javac.handlers.HandleToString.java。我想得到 parent 的领域,直到 Object 然后用“,”加入他们,但我找不到实现它的方法。

现在只能勉强通过递归和String.substring方法来实现,但不是很通用。我修改后的Lombok反编译结果之一如下:

public String toString() {
        String varSuperToString = super.toString();
        int varStart = varSuperToString.indexOf("{") + 1;
        int varEnd = varSuperToString.lastIndexOf("}");
        String varSuperSub = "";

        try {
            varSuperSub = varSuperToString.substring(varStart, varEnd);
        } catch (StringIndexOutOfBoundsException var6) {
        }

        if (!varSuperSub.isEmpty()) {
            varSuperSub = varSuperSub + ", ";
        }

        return "NonEmptyChild_NonEmptyParent{" + varSuperSub + "email=" + this.email + ", " + "city=" + this.city + "}";
    }

Lombok 的 toString: NonEmptyChild_NonEmptyParent(super=NonEmptyParent(id=8, name=zfff), email=zfff@qq.com, city=bj)

但是我想要: NonEmptyChild_NonEmptyParent{id=8, name=zfff, email=zfff@qq.com, city=bj}

我想我需要在 Lombok 注释处理器中获取 parent 的字段直到对象,但我不知道如何获取它们。你能帮帮我吗?

最佳答案

指定callSuper=true调用父类(super class)toString

 @ToString(callSuper=true)

使用 lombook 注释你不能改变模式,如果你需要任何模式改变你必须覆盖 toString,因为父类(super class)字段是非私有(private)的你可以使用 this< 直接访问它们关键字

@Override
public String toString() {
    return "TestModel {id=" + this.id +"name= "+this.name+"email= "+this.email+"city= "+this.city+ "}";
}

关于java - 如何在 Lombok 注释处理程序中获取 super 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57253722/

相关文章:

java - 在 lombok Builder 中使用 Jackson、@JsonIdentityInfo 和 @JsonDeserialize 时出现 UnrecognizedPropertyException

spring-boot - Gradle构建不适用于Lombok Spring Boot

java - hazelcast 配置中自动递增标志的用途

java - 将 Jar 文件作为独立应用程序执行

java - 使用带有 JDBC Bolt 驱动程序的 Neo4j 嵌入式数据库进行 Spring Boot 测试

java - Spring Boot Rest API 返回与 Lombok 一起使用的空 JSON

java - 为了向后兼容,如何覆盖不推荐使用的重载方法?

java - 遍历不同类型对象的树

java - Lombok @Getter 和 Collections 的副本

java - 从另一个对象包含到 Lombok ToString 字段中