Android Room 构建问题:There are multiple good constructors

问题描述与处理策略

1、问题描述
java 复制代码
@Entity(tableName = "Car",
        indices = {
                @Index(name = "idx_car_carId_unique", value = {"carId"}, unique = true),
                @Index(name = "idx_car_carNum_unique", value = {"carNum"}, unique = true)
        })
public class Car extends BaseEntity {

    @ColumnInfo(name = "carId")
    @NonNull
    public Integer carId;

    @ColumnInfo(name = "carName")
    public String carName;

    @ColumnInfo(name = "carNum")
    @NonNull
    public String carNum;

    public Car() {
    }

    public Car(@NonNull Integer carId, String carName, @NonNull String carNum) {
        this.carId = carId;
        this.carName = carName;
        this.carNum = carNum;
    }

    @Override
    public String toString() {
        return "Car{" +
                "carId=" + carId +
                ", carName='" + carName + '\'' +
                ", carNum='" + carNum + '\'' +
                '}';
    }
}
  • 在 Room 中,上述定义的实体类,在构建时报如下错误

    There are multiple good constructors and Room will pick the no-arg constructor.
    You can use the @Ignore annotation to eliminate unwanted constructors.
    public class Car extends BaseEntity {
    ^

    翻译

    有多个构造函数,Room 将选择无参数构造函数。
    您可以使用 @Ignore 注释来消除不需要的构造函数。

2、问题原因
  1. Room 要求实体类必须有一个明确的构造函数,Room 优先选择无参构造函数

  2. 如果类中有其他构造函数,Room 会报错,因为它无法确定应该使用哪个构造函数

  3. 在代码中,Car 有两个构造函数,分别为无参构造函数 public Car() {} 和带参构造函数 public Car(@NonNull Integer carId, String carName, @NonNull String carNum),Room 无法确定应该使用哪个构造函数,因此报错

3、处理策略
  1. 使用 @Ignore 注解标记其他构造函数,例如,如果希望 Room 使用无参构造函数,可以使用 @Ignore 注解标记带参构造函数,告诉 Room 忽略它

  2. 或者,删除其他构造函数,例如,如果希望 Room 使用无参构造函数,可以删除带参构造函数

  • 这里选择使用 @Ignore 注解标记带参构造函数
java 复制代码
@Ignore
public Car(@NonNull Integer carId, String carName, @NonNull String carNum) {
    this.carId = carId;
    this.carName = carName;
    this.carNum = carNum;
}
相关推荐
代码or搬砖21 小时前
String字符串
android·java·开发语言
leo__52021 小时前
基于两步成像算法的聚束模式SAR MATLAB实现
开发语言·算法·matlab
Macbethad1 天前
自动化测试技术报告
开发语言·lua
不会画画的画师1 天前
Go开发指南:io/ioutil包应用和迁移指南
开发语言·后端·golang
2503_928411561 天前
12.22 wxml语法
开发语言·前端·javascript
5980354151 天前
【java工具类】小数、整数转中文大写
android·java·开发语言
JIngJaneIL1 天前
基于java + vue个人博客系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot
吃喝不愁霸王餐APP开发者1 天前
Java后端服务在对接全国性霸王餐API时的多数据中心部署与就近调用策略
java·开发语言
froginwe111 天前
jQuery UI 实例
开发语言
这周也會开心1 天前
128陷阱,==与equals区别
java·开发语言