gpt4 book ai didi

对于库模块中定义的 POJO 的 @NonNull 注释构造函数参数,Android Room @Embedded 注释编译失败

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:10:25 24 4
gpt4 key购买 nike

我有一个 POJO,我正在将其嵌入到房间实体中;请注意,POJO 是在库模块中定义的

@Entity
public class Person {
@PrimaryKey
@NonNull
private String uuid;

@Embedded
@NonNull
private Address address;

public Person(@NonNull String uuid, @NonNull Address address) {
this.uuid = uuid;
this.address = address;
}

@NonNull
public String getUuid() {
return uuid;
}

@NonNull
public Address getAddress() {
return address;
}
}


public class Address {
@NonNull
private String street;

@NonNull
private String city;

public Address(@NonNull String street, @NonNull String city) {
this.street = street;
this.city = city;
}

@NonNull
public String getStreet() {
return street;
}

@NonNull
public String getCity() {
return city;
}
}


@Dao
public interface PersonDao {
@Query("SELECT * FROM Person")
List<Person> getPersons();
}



@TypeConverters(DateConverter.class)
@Database(entities = {Person.class}, version = 1, exportSchema = false)
public abstract class PersonDb extends RoomDatabase {
private static volatile PersonDb INSTANCE;

public abstract PersonDao getPersonDao();
}

编译失败

"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)." Error:Cannot find setter for field.

如果我从构造函数参数中删除 @NonNull 注释到 Address POJO,代码可以正常编译。此外,如果相同的 POJO 在应用程序模块中,代码会编译。

可以看出,Address 类确实有一个公共(public)构造函数。

我在这里错过了什么?从 Room 的角度来看,可用构造函数 的定义是什么?还是 Room 的问题?

最佳答案

文档说:"To persist a field, Room must have access to it. You can make a field public, or you can provide a getter and setter for it. If you use getter and setter methods, keep in mind that they're based on JavaBeans conventions in Room. "

uuidaddressPerson 中被声明为 private,你有这些的 getter 但没有 setter。因此,您可以创建 setter 或将它们声明为 public

关于对于库模块中定义的 POJO 的 @NonNull 注释构造函数参数,Android Room @Embedded 注释编译失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49115995/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com