【发布时间】:2021-06-06 11:15:03
【问题描述】:
使用: 弹簧靴 马文 龙目岛 STS 4.9
我有一个简单的构造函数,它接受 3 个参数并将它们分配给相应的字段。另一个字段是自动生成的,另外两个是 Spring 自动装配的。显式定义的构造函数用 @Builder 注释(在构造函数级别,正如 Lombok 在文档中所推荐的那样。)构造函数看起来像这样:
@Id
@GeneratedValue( )
@Column(value="account_id")
private Long accountId;
@Setter
@Column(value="user_id")
@ManyToOne
private Long userId;
@Setter
@Column(value="credentials")
@OneToOne
@PrimaryKeyJoinColumn(name="accountId")
private Credentials credentials;
@Setter
@Column(value="user_profile")
@OneToOne
@PrimaryKeyJoinColumn(name="accountId")
private UserProfileInfo userProfileInfo;
@Setter
@Column(value="account_credit")
@OneToOne
@PrimaryKeyJoinColumn(name="accountId")
@Autowired
private Credit acctCredit;
@Column(value="account_state")
@OneToOne
@PrimaryKeyJoinColumn(name="accountId")
@Autowired
private AccountState acctState;
@Builder
public Account(Long userId, Credentials cred, UserProfileInfo info){
this.userId = userId;
this.credentials = cred;
this.userProfileInfo = info;
}
据我所知,一切似乎都在这里检查。至少,没有警告或错误。但是,当我尝试在其他地方使用 builder() 方法时,如下所示:
@Test
void testThreeArgConstructerReturnsProperObject() {
Account testAccount = Account.builder().build();
}
...好像@Builder 方法根本不存在。我在构建下得到了通常的红色下划线,但是用光标悬停只是提供了声明一个新的builder() in
帐户类。如果我从测试类中删除builder(),智能感知只会显示Account.class、super 和this。就好像没有注释一样。
起初,我以为我以某种方式滥用了它,因为我最近才开始使用它,但是我已经查看了我的代码并与示例进行了几个小时的比较。据我所知,语法和用法都是正确的。
我也做了一些调试。除了检查智能感知之外,我还尝试在不同的范围内使用它,包括在同一个包中,我尝试了“最简单形式”的方法,我更改了方法,使其只有一个 int 参数。在每种情况下,我都无法让环境确认构造函数。
我在这里忽略了什么吗?
【问题讨论】:
-
如果有任何我遗漏的信息,请告诉我,我会发布的。我也可以发布作曲类,但我认为它们不相关。而且它们都很大。
-
其他 lombok 注释是否提供了您期望的内容?
-
不确定,我会尝试测试。我不认为我目前正在使用任何其他人。我将在测试中尝试一对。
-
@Stultuske 不,他们不是。创建项目时,我通过 Initializr 将 Lombok 引入了 maven。我知道我有罐子,注释在悬停+单击时自动导入。不知道为什么他们不工作。
-
刚刚确认。 1.18.20.jar 在构建路径上。我认为 Maven 没有指定版本。
标签: java spring-boot lombok sts