如何在 Lombok 注释处理程序中获取超级字段

jnm*_*nmj 6 java lombok

我想修改 Lombok @ToString 的格式,使其表现得像 IDEA 生成的 toString 代码。没有可用的选项,所以我尝试修改 Lombok 源代码 lombok.javac.handlers.HandleToString.java。我想获得父母的领域,直到 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 + "}";
    }
Run Code Online (Sandbox Code Playgroud)

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 注释处理器中获取父字段直到 Object ,但我不知道如何获取它们。你能帮我吗?

Dea*_*ool 19

指定callSuper=true调用超类toString

 @ToString(callSuper=true)
Run Code Online (Sandbox Code Playgroud)

使用 lombook 注释您不能更改模式,如果您需要任何模式更改,您必须覆盖toString,由于超类字段是非私有的,您可以使用this关键字直接访问它们

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