有哪些适用于 Java 的工具或库将采用仅具有访问器方法定义的 interface
并自动生成不可变对象(immutable对象)类以及用于增量构建新实例或更改现有实例的“构建器”类通过创建新的?
示例输入:
public interface Car {
String getModelName();
int getWheelCount();
}
示例输出:
import javax.annotation.concurrent.Immutable;
import javax.annotation.concurrent.NotThreadSafe;
@Immutable
public final class ImmutableCar implements Car {
@NotThreadSafe
public static final class Builder implements Car {
private String modelName;
private int wheelCount;
public Builder() {
}
public Builder(final Car car) {
modelName = car.getModelName();
wheelCount = car.getWheelCount();
}
public ImmutableCar build() {
return new ImmutableCar(wheelCount, modelName);
}
@Override
public String getModelName() {
return modelName;
}
@Override
public int getWheelCount() {
return wheelCount;
}
public void setModelName(final String modelName) {
this.modelName = modelName;
}
public void setWheelCount(final int wheelCount) {
this.wheelCount = wheelCount;
}
}
private final String modelName;
private final int wheelCount;
public ImmutableCar(final int wheelCount, final String modelName) {
this.wheelCount = wheelCount;
this.modelName = modelName;
}
@Override
public String getModelName() {
return modelName;
}
@Override
public int getWheelCount() {
return wheelCount;
}
}
最佳答案
Immutables ( http://immutables.github.io ) 注释处理器完全符合您的需求。它功能齐全且可自定义(您知道所有那些 set
vs with
vs no-prefix wars,使用你喜欢的任何东西)。它可以使用接口(interface)、抽象类、注释的构建器生成不可变的实现。此外,它还可以生成构建器来调用静态工厂方法或 POJO 构造函数以及许多其他东西。
@Value.Immutable
public interface ValueObject {
String name();
List<Integer> counts();
Optional<String> description();
}
// Compile using annotation processor and use it like this
ValueObject valueObject =
ImmutableValueObject.builder()
.name("My value")
.addCounts(1)
.addCounts(2)
.build();
关于java - 自动生成 Java 接口(interface)的不可变类和匹配的构建器类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14725863/