如何在Java中使用lombok的@Delegate注解

Tia*_*gyu 8 java annotations lombok

我想@Delegate在我的代码中使用 lombok 的注释。请检查下面的代码片段,它会抛出一个错误:getAge()已定义:

public interface I {
    String getName();
    int getAge();
}

@Data
public class Vo {
    private String name;
    private long age;
}

@AllArgsConstructor
public class Adapter implements I {

    @Delegate(types = I.class)
    private Vo vo;

    //I want to use my own code here,Because vo.getAge() returns a long,But I.getAge() expects a int
    public int getAge(){
        return (int) vo.getAge();
    }
}
Run Code Online (Sandbox Code Playgroud)

Swe*_*per 13

来自龙目岛文档

要非常精确地控制委托的内容和不委托的内容,请编写带有方法签名的私有内部接口,然后将这些私有内部接口指定为

@Delegate(types=PrivateInnerInterfaceWithIncludesList.class, excludes=SameForExcludes.class).
Run Code Online (Sandbox Code Playgroud)

这意味着要包含所有内容I,但仅排除getAge,您可以声明一个额外的内部接口,如下所示:

private interface Exclude {
    int getAge();
}
Run Code Online (Sandbox Code Playgroud)

并将其传递给exclude

@Delegate(types = I.class, excludes = Exclude.class)
Run Code Online (Sandbox Code Playgroud)