为什么 Lombok @Wither 不起作用
Why Lombok @Wither don't works
我正在使用 Lombok 1.18.8:
compileOnly 'org.projectlombok:lombok:1.18.8'
这是我与@Wither 的简单 class:
@Wither
public class User {
private int a;
}
但是当我试图在另一个中调用它时 withA() 方法没有出现 class:
class test {
User user = new User().withA(1); // withA is red
}
我的代码有什么问题?
UPD:其他 Lombok 注释有效。例如@Setter、Getter、@NoArgsConstructor
我认为您只是缺少 intellij
上的 Lombok
安装
双击 Lombok.jar
并选择 intelliJ IDE
build.gradle
中 lombok 注释处理的示例配置:
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...
}
@Wither is deprecated since 10.X.X. With has been promoted to the main
package, so use that one instead.
请看这个Lombok Wither
这就是为什么你没有 withA() 函数,如果你降级你的包你肯定可以使用它
第 compileOnly 'org.projectlombok:lombok:1.18.8'
行显示您正在使用 gradle。
我认为检查它是否有效的最简单方法就是 运行 gradle 构建(没有 IDE)。
由于 lombok 是一个注释处理器,只要代码通过了编译,它就应该可以工作(而且很可能它真的基于那一行工作)。
因此您应该检查 IDE(您尚未指定它实际上是哪个 IDE)如何与 lombok 集成。如果使用 java 编译器(如在 intelliJ 中)编译它并配置 lombok,则可能需要启用 "annotation processing"。您还可以为 IDE 安装 Lombok 插件。
另一个有用的提示是使用 delombok 并查看 lombok 是否实际生成了一些东西
龙目岛 1.18.8:@Wither
如果您查看 withA()
的实际实现,您会注意到它依赖于全参数构造函数。为了让你的例子工作,尝试添加它,以及一个无参数的构造函数:
@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 插件进行测试。
龙目岛 1.18.10:@With
@With
已提升,@Wither
已弃用:
只需将 lombok.experimental.Wither
替换为 lombok.With
。其他一切都类似于 1.18.8
:
@With
@AllArgsConstructor
@NoArgsConstructor
public class User {
private int a;
}
我正在使用 Lombok 1.18.8:
compileOnly 'org.projectlombok:lombok:1.18.8'
这是我与@Wither 的简单 class:
@Wither
public class User {
private int a;
}
但是当我试图在另一个中调用它时 withA() 方法没有出现 class:
class test {
User user = new User().withA(1); // withA is red
}
我的代码有什么问题?
UPD:其他 Lombok 注释有效。例如@Setter、Getter、@NoArgsConstructor
我认为您只是缺少 intellij
上的 Lombok
安装
双击 Lombok.jar
并选择 intelliJ IDE
build.gradle
中 lombok 注释处理的示例配置:
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...
}
@Wither is deprecated since 10.X.X. With has been promoted to the main package, so use that one instead.
请看这个Lombok Wither
这就是为什么你没有 withA() 函数,如果你降级你的包你肯定可以使用它
第 compileOnly 'org.projectlombok:lombok:1.18.8'
行显示您正在使用 gradle。
我认为检查它是否有效的最简单方法就是 运行 gradle 构建(没有 IDE)。 由于 lombok 是一个注释处理器,只要代码通过了编译,它就应该可以工作(而且很可能它真的基于那一行工作)。
因此您应该检查 IDE(您尚未指定它实际上是哪个 IDE)如何与 lombok 集成。如果使用 java 编译器(如在 intelliJ 中)编译它并配置 lombok,则可能需要启用 "annotation processing"。您还可以为 IDE 安装 Lombok 插件。
另一个有用的提示是使用 delombok 并查看 lombok 是否实际生成了一些东西
龙目岛 1.18.8:@Wither
如果您查看 withA()
的实际实现,您会注意到它依赖于全参数构造函数。为了让你的例子工作,尝试添加它,以及一个无参数的构造函数:
@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 插件进行测试。
龙目岛 1.18.10:@With
@With
已提升,@Wither
已弃用:
只需将 lombok.experimental.Wither
替换为 lombok.With
。其他一切都类似于 1.18.8
:
@With
@AllArgsConstructor
@NoArgsConstructor
public class User {
private int a;
}