我正在使用房间数据库进行本地缓存。在我的实体内部,我还有其他对象,它们的 getter 具有与其用途相关的接口(interface)返回类型。然而,房间无法为这些领域找到 setter/getter 。我的目标是将这些接口(interface)用作返回类型,以便我可以将来自多个远程源的数据添加到一个数组中。我怎样才能做到这一点,同时实现灵活和良好的抽象?
public interface Venue {
Location getLocation();
Contact getContact();
}
public interface Location {
double getLongitude();
double getLatitude();
}
public interface Contact {
String getPhoneNumber();
String getFacebookUsername();
}
public class VenueSourceOne implements Venue{
private VenueSourceOneLocation venueSourceOneLocation;
private VenueSourceOneContact venueSourceOneContact;
Location getLocation(){
return venueSourceOneLocation;
}
Contact getContact(){
return venueSourceOneContact
}
}
public class VenueSourceTwo implements Venue{
private VenueSourceTwoLocation venueSourceTwoLocation;
private VenueSourceTwoContact venueSourceTwoContact;
Location getLocation(){
return venueSourceTwoLocation;
}
Contact getContact(){
return venueSourceTwoContact
}
}
public class Main{
....add to a List<Venue> and do something on the UI
}
最佳答案
由于我提出的问题以外的原因,我将 field 接口(interface)更改为抽象类:
来自
public interface Venue {
Location getLocation();
Contact getContact();
}
到
public abstract class Venue {
public abstract Location getLocation();
public abstract Contact getContact();
}
我的问题的真正解决方案如下:
来自
public class VenueSourceOne implements Venue{
private VenueSourceOneLocation venueSourceOneLocation;
private VenueSourceOneContact venueSourceOneContact;
Location getLocation(){
return venueSourceOneLocation;
}
Contact getContact(){
return venueSourceOneContact
}
}
public class VenueSourceTwo implements Venue{
private VenueSourceTwoLocation venueSourceTwoLocation;
private VenueSourceTwoContact venueSourceTwoContact;
Location getLocation(){
return venueSourceTwoLocation;
}
Contact getContact(){
return venueSourceTwoContact
}
}
到
public class VenueSourceOne extends Venue{
private VenueSourceOneLocation location;
private VenueSourceOneContact contact;
@Override
VenueSourceOneLocation getLocation(){
return location;
}
@Override
VenueSourceOneContact getContact(){
return contact;
}
}
public class VenueSourceTwo extends Venue{
private VenueSourceTwoLocation location;
private VenueSourceTwoContact contact;
@Override
VenueSourceTwoLocation getLocation(){
return location;
}
@Override
VenueSourceTwoContact getContact(){
return contact;
}
}
当从源中检索数据时,列表将使用抽象类指定的通用类型,而房间将使用特定类型存储数据。
关于安卓工作室 : Room: error: Cannot find getter for field,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58601785/