Lombok Builder 返回接口类型

问题描述 投票:0回答:1

我有一个实现接口的类。显然,这个类有一个来自 Lombok 的 @SuperBuilder 注释,它返回这个类的一个对象。但我真正需要的是它返回一个 Interface 类型的对象。可以配置吗?

@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class MyClass extends AbstractMyClass implements MyInstance {
}

这就是我得到的:

MyClass obj = MyClass.builder().build();

这就是我所期望的:

MyInstance obj = MyClass.builder().build();
java lombok
1个回答
0
投票

不幸的是,Lombok 的

@SuperBuilder
注释并不直接支持这种开箱即用的行为。您可以在
MyClass
类中创建一个静态工厂方法来实现此目的。

以下是修改代码的方法:

@Data
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class MyClass extends AbstractMyClass implements MyInstance {
 
    // Your class fields and methods
    
    public static MyInstanceBuilder builder() {
        return new MyClassBuilder();
    }
}

由于

MyInstanceBuilder
扩展了
MyClassBuilder
,它仍然可以用于构建
MyClass
的实例。 但是,
builder()
方法的返回类型是
MyInstanceBuilder
,允许您使用它来构建接口类型 (
MyInstance
) 的实例。

现在,您可以像这样创建实例:

MyInstance obj = MyClass.builder().build();
© www.soinside.com 2019 - 2024. All rights reserved.