@RequiredArgsConstructor
似乎无法在下面的代码中使用。为什么?
import java.io.Serializable;
import lombok.Data;
import lombok.RequiredArgsConstructor;
@Data
@RequiredArgsConstructor
public class User implements Serializable {
private String username;
/*public User(String username) {
this.username = username;
}*/
private static final long serialVersionUID = 8043545738660721361L;
}
我收到错误:
javax.faces.el.EvaluationException: java.lang.Error: Unresolved compilation problem:
The constructor User(String) is undefined
由于某些原因,它似乎适用于其他没有构造函数定义但使用@RequiredArgsConstructor
注释的域类。
答案 0 :(得分:21)
根据Documentation, 必需参数是最终字段和具有约束的字段,例如@NonNull。
您需要将用户名设为@NonNull
@NonNull private String username;
你也需要让它们成为决赛。
答案 1 :(得分:2)
@Data也提供@RequiredArgsConstructor,这对将来的读者也很值得注意,因此不必同时使用两个注释:)
答案 2 :(得分:1)
您是否在intellij中安装了Lombok插件?
如果不是
File -> Settings -> Plusings: Search for Lombok (CodeStream) version.
重新启动IDE,它应该已修复。
仔细检查:
Annotation Processors
的intellij IDE中启用File -> Settings: Search for Annotation Processors
答案 3 :(得分:1)
尝试将项目/模块JDK更改为1.8。
项目结构->项目设置->项目SDK和项目语言级别
答案 4 :(得分:1)
@RequiredArgsConstructor
> Generates a constructor with required arguments. Required arguments
are final fields and fields with constraints such as @NonNull.
> Complete documentation is found at the project lombok features page
for @Constructor.
> Even though it is not listed, this annotation also has the
*`onConstructor`* parameter. See the full documentation for more details.
龙目图书馆
要使用@RequiredArgsConstructor
,变量必须是final
,它会自动在构造函数中创建值
private final String username;
答案 5 :(得分:0)
@RequiredArgsConstructor批注的参数字段必须为final
。因此,此修复程序将起作用:
private final String username;
如果缺少final
关键字,IDE IntelliJ会将变量显示为灰色(非活动状态),这对于检测这种错误非常有帮助。