首页 > 解决方案 > 房间找不到 lombok 生成的构造函数

问题描述

我正在使用 lombok 为我的模型生成构造函数、getter 和 setter。当我尝试使用 lombok 为我的实体类生成构造函数时,出现此错误

Error:(14, 8) error: Entities and Pojos must have a usable public 
constructor. You can have an empty constructor or a constructor whose 
parameters match the fields (by name and type).
Tried the following constructors but they failed to match:
Region(int,java.lang.String,java.lang.String) -> [param:arg0 -> matched 
field:unmatched, param:arg1 -> matched field:unmatched, param:arg2 -> 
matched field:unmatched]

但是手动编写构造函数是可行的。谁能帮我找出问题所在?

我的实体类如下所示

@Value
@Entity
public class Region {
    @PrimaryKey
    private int regionId;
    private String name;
    private String code;
}

房间版本:1.1.0 龙目岛版本:1.16.20

标签: androidandroid-roomlombok

解决方案


匹配似乎失败了,因为构造函数参数名称在运行时不可用。由于版本 1.16.20 lombok 不再生成@ConstructorProperties注释(将带有这些名称)。尝试添加lombok.anyConstructor.addConstructorProperties = true到您的lombok.config, lombok 将为您的构造函数生成@ConstructorProperties注释。(有关如何配置 lombok 的详细信息,请参阅https://projectlombok.org/features/configuration 。)

编辑:问题是编译期间的注释处理。Room 和 lombok 都作为注释处理器钩入 javac,它们不能很好地结合使用。所以目前唯一稳定的办法就是先去delombok。


推荐阅读