房间未找到Lombok生成的构造函数

时间:2018-07-05 10:19:38

标签: android android-room 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

2 个答案:

答案 0 :(得分:0)

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

编辑:问题是编译期间的注释处理。 Room和lombok都作为注释处理器挂接到javac中,并且它们不能很好地结合使用。因此,目前唯一的稳定解决方案是首先部署delombok。

答案 1 :(得分:0)

您可以使用以下设置:

@Entity
@Getter
@Setter
@AllArgsConstructor(onConstructor = @__({@Ignore}))
@NoArgsConstructor
public class Region {
    @PrimaryKey
    private int regionId;
    private String name;
    private String code;
}

这将使Room使用默认的构造函数,并通过提供的设置器设置值。此外,您有一个构造函数,该构造函数接受用于对象实例化的所有参数,但将被Room忽略。

注意:对象不会那样不变