我正在使用Lombok 1.18.8:
compileOnly 'org.projectlombok:lombok:1.18.8'
这是我@Wither的简单课程:
@Wither
public class User {
private int a;
}
但是当我尝试在另一个类中调用它时,withA()方法没有出现:
class test {
User user = new User().withA(1); // withA is red
}
我的代码有什么问题?
UPD:其他Lombok注释有效。例如@ Setter,Getter,@ NoArgsConstructor
答案 0 :(得分:1)
我认为您只是错过了Lombok
上intellij
的安装
双击Lombok.jar
并选择intelliJ IDE
build.gradle
中的龙目岛注释游行示例配置:
dependencies {
compileOnly('org.projectlombok:lombok:1.16.20')
annotationProcessor 'org.projectlombok:lombok:1.16.20'
// compile 'org.projectlombok:lombok:1.16.20' <-- this no longer works!
// other dependencies...
}
从10.X.X开始不推荐使用@Wither。随着已提升为主体 包,请改用该包。
请查看此Lombok Wither
这就是为什么您没有withA()函数的原因,如果您降级了程序包,则可以肯定使用它
答案 1 :(得分:1)
如果查看withA()
的实际实现,您会发现它依赖于all-args构造函数。为了使您的示例正常工作,请尝试添加它以及无参数构造函数:
@Wither
@AllArgsConstructor
@NoArgsConstructor
public class User {
private int a;
}
delombok 的版本是:
public class User {
private int a;
public User withA(int a) {
return this.a == a ? this : new User(a);
}
public User(int a) {
this.a = a;
}
public User() {
}
}
注意:已通过Lombok 1.18.8,IntelliJ IDEA和Lombok插件进行了测试。
@With
已升级,@Wither
已弃用:
只需将lombok.experimental.Wither
替换为lombok.With
。其他所有内容都与1.18.8
类似:
@With
@AllArgsConstructor
@NoArgsConstructor
public class User {
private int a;
}
答案 2 :(得分:0)
第compileOnly 'org.projectlombok:lombok:1.18.8'
行表明您正在使用gradle。
我认为,检查其是否有效的最简单方法可以是运行gradle build(不使用IDE)。 由于lombok是注释处理器,因此只要代码通过编译,它就应该可以工作(并且有可能实际上基于该行而工作)。
因此,您应该检查IDE(尚未指定实际上是哪个IDE)如何与lombok集成。如果使用Java编译器(例如intelliJ)进行编译并配置lombok,则可能需要启用“注释处理”。您还为您的IDE安装了Lombok插件。
另一个有用的提示是使用delombok并查看lombok是否确实生成了某些东西