我有一个实现接口的类。显然,这个类有一个来自 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();
不幸的是,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();