为什么龙目岛@Wither无法正常工作

时间:2019-11-15 13:01:49

标签: java lombok

我正在使用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

3 个答案:

答案 0 :(得分:1)

我认为您只是错过了Lombokintellij的安装 双击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)

Lombok 1.18.8:@Wither

如果查看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插件进行了测试。

龙目岛1.18.10:@With

@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是否确实生成了某些东西