英文:
Different constructors (LOMBOK)
问题
我有一个类看起来像这样:
@EqualsAndHashCode
@RequiredArgsConstructor
public class StatusUpdate {
@Getter
@Setter
private Long id;
@Getter
@Setter
@NonNull
private String text;
@Getter
@Setter
@NonNull
private Date added;
}
我想使用 Lombok 创建以下两个构造函数:
public StatusUpdate(String text) {
this.text = text;
}
public StatusUpdate(String text, Date added) {
this.text = text;
this.added = added;
}
我尝试过使用以下三个注解:
@NoArgsConstructor
@RequiredArgsConstructor
@AllArgsConstructor
但是我无法通过这些来实现,我只有一个带有两个参数的构造函数,所以我需要另一个仅带一个参数的构造函数。我阅读了这个主题:@SomeArgsConstructor,这就是我需要的,但是由于这个不存在,我想我应该手动创建一个所需的单参数构造函数,而其他构造函数将使用 Lombok 来处理。还有没有更好/更优雅的方法只使用 Lombok 来实现呢?
谢谢!
英文:
I have a class that looks like this:
@EqualsAndHashCode
@RequiredArgsConstructor
public class StatusUpdate {
@Getter
@Setter
private Long id;
@Getter
@Setter
@NonNull
private String text;
@Getter
@Setter
@NonNull
private Date added;
}
And I want to create these two constructors using Lombok:
public StatusUpdate(String text) {
this.text = text;
}
public StatusUpdate(String text, Date added) {
this.text = text;
this.added = added;
}
I tried using all three annotations:
@NoArgsConstructor
@RequiredArgsConstructor
@AllArgsConstructor
But I couldn't do that with these, I only have one constructor that has two parameters, so I need one more constructor with one parameter only. I read this topic: @SomeArgsConstructor and this is what I need but since this does not exists I guess I should create manually one arg constructor that I need and other constructors I'll handle with Lombok, or is there any better / more elegant way to do it using Lombok only?
Thanks!
答案1
得分: 2
是的,你应该自己添加它们。几年前已经有一个讨论关于添加@SomeArgsConstructor
注解的,但由于Lombok团队从未添加过该注解,我认为他们不太可能会添加。
或者,如评论中所述,可以使用带有@Builder注解的构建器模式。然后你可以编写类似这样的代码:StatusUpdate.builder().text("text").date(new Date()).build();
。
顺便说一下,如果你将所有字段都用@Getter
、@Setter
进行注解,并在类级别上使用@EqualsAndHashCode
和@RequiredArgsConstructor
,我认为@Data注解可能很适合这个类。
英文:
Yeah, you should just add them yourself. Years ago there was already a discussion to add the @SomeArgsConstructor
annotation, but since the Lombok team never did add that annotation, I think it is unlikely they will ever do it.
Or, as stated in the comments, use the builder pattern with the @Builder annotation. Then you could write something like: StatusUpdate.builder().text("text").date(new Date()).build();
.
Btw, if you do annotate all your fields with @Getter
, @Setter
and use the @EqualsAndHashCode
and @RequiredArgsConstructor
on class level, I think the @Data annotation could be a good fit for this class.
答案2
得分: 0
使用 @Builder
注解在你的实体类中,并手动构建你的对象。
User user = User.builder()
.username(signupDto.getUsername())
.email(signupDto.getEmail())
.password(encoder.encode(signupDto.getPassword()))
.roles(roles)
.build();
英文:
use @Builder
annotation with your entity class and build your object manually.
User user = User.builder()
.username(signupDto.getUsername())
.email(signupDto.getEmail())
.password(encoder.encode(signupDto.getPassword()))
.roles(roles)
.build();
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论