lombok 可以同时生成静态和非静态构造函数吗?
Can lombok generate both static and non static constructors?
我有一个简单的dto
class
@Getter
@EqualsAndHashCode
@ToString
@RequiredArgsConstructor(staticName = "of", access = AccessLevel.PUBLIC)
public class MyClass {
private final String field1;
private final String field2;
}
我需要两个构造函数 static
和 non-static
。如果我 delombok 构造函数
@Getter
@EqualsAndHashCode
@ToString
public class MyClass{
private final String field1;
private final String field2;
private MyClass(String field1, String field2) {
this.field1= field1;
this.field2= field2;
}
public static MyClass of(String field1, String field2) {
return new MyClass(field1, field2);
}
}
这几乎是我需要的,但 non-static
构造函数是 private
。可以用 lombok public
实现吗?
这在 Lombok 中是不可能的(至少在当前的 1.18.12 版本中是不可能的)。
考虑查看 JavaDoc here。它说设置 staticName 属性 会将构造函数标记为私有。它没有明确指定它将忽略 access属性,但实际上它似乎确实如此。
提供多种方法来实现相同结果通常被认为是不好的做法,在本例中创建了一个具有相同参数的 class 实例。
鉴于您的代码已经使用了这两种方法,您可能会考虑手动创建静态构建器方法并将一种技术标记为已弃用,以防止将来使用它,直到完全重构它。
@Getter
@EqualsAndHashCode
@ToString
@AllArgsConstructor(onConstructor=@__(@Deprecated))
public class MyClass {
private final String field1;
private final String field2;
public static MyClass of(String field1, String field2) {
return new MyClass(field1, field2);
}
}
或:
@Getter
@EqualsAndHashCode
@ToString
@AllArgsConstructor
public class MyClass {
private final String field1;
private final String field2;
/**
* @deprecated Will be removed in the future.
* Use {@link #MyClass(String, String)} instead
*/
@Deprecated
public static MyClass of(String field1, String field2) {
return new MyClass(field1, field2);
}
}
我有一个简单的dto
class
@Getter
@EqualsAndHashCode
@ToString
@RequiredArgsConstructor(staticName = "of", access = AccessLevel.PUBLIC)
public class MyClass {
private final String field1;
private final String field2;
}
我需要两个构造函数 static
和 non-static
。如果我 delombok 构造函数
@Getter
@EqualsAndHashCode
@ToString
public class MyClass{
private final String field1;
private final String field2;
private MyClass(String field1, String field2) {
this.field1= field1;
this.field2= field2;
}
public static MyClass of(String field1, String field2) {
return new MyClass(field1, field2);
}
}
这几乎是我需要的,但 non-static
构造函数是 private
。可以用 lombok public
实现吗?
这在 Lombok 中是不可能的(至少在当前的 1.18.12 版本中是不可能的)。 考虑查看 JavaDoc here。它说设置 staticName 属性 会将构造函数标记为私有。它没有明确指定它将忽略 access属性,但实际上它似乎确实如此。
提供多种方法来实现相同结果通常被认为是不好的做法,在本例中创建了一个具有相同参数的 class 实例。 鉴于您的代码已经使用了这两种方法,您可能会考虑手动创建静态构建器方法并将一种技术标记为已弃用,以防止将来使用它,直到完全重构它。
@Getter
@EqualsAndHashCode
@ToString
@AllArgsConstructor(onConstructor=@__(@Deprecated))
public class MyClass {
private final String field1;
private final String field2;
public static MyClass of(String field1, String field2) {
return new MyClass(field1, field2);
}
}
或:
@Getter
@EqualsAndHashCode
@ToString
@AllArgsConstructor
public class MyClass {
private final String field1;
private final String field2;
/**
* @deprecated Will be removed in the future.
* Use {@link #MyClass(String, String)} instead
*/
@Deprecated
public static MyClass of(String field1, String field2) {
return new MyClass(field1, field2);
}
}