gpt4 book ai didi

java - lombok 可以生成静态和非静态构造函数吗?

转载 作者:行者123 更新时间:2023-12-01 19:11:24 25 4
gpt4 key购买 nike

我有一个简单的dto

@Getter
@EqualsAndHashCode
@ToString
@RequiredArgsConstructor(staticName = "of", access = AccessLevel.PUBLIC)
public class MyClass {
private final String field1;
private final String field2;
}

我需要同时拥有静态非静态构造函数。如果我 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);
}
}

这几乎是我所需要的,但是非静态构造函数是私有(private)。是否可以使用 lombok 使其公开

最佳答案

这在 Lombok 中是不可能的(至少在当前版本 1.18.12 中不可能)。考虑查看 JavaDoc here 。它表示设置 staticName 属性会将构造函数标记为私有(private)。它没有明确指定它将忽略 access 属性,但实际上它似乎确实如此。

提供多种方法来实现相同的结果通常被认为是不好的做法,在本例中创建具有相同参数的类实例。鉴于您的代码已经使用了这两种技术,您可能会考虑手动创建静态构建器方法并将其中一种技术标记为已弃用,以防止其将来使用,直到完全重构为止。

@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);
}
}

关于java - lombok 可以生成静态和非静态构造函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60146834/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com