我正在使用Room数据库进行本地缓存。在我的实体内部,我还有其他对象,这些对象的吸气剂具有与其用途相关的接口的返回类型。但是房间找不到适合该领域的吸气剂。我的目标是将这些接口用作返回类型,以便可以将数据从多个远程源添加到一个阵列中。在实现灵活,良好的抽象的同时该如何做?
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
}
答案 0 :(得分:0)
如此简单的解决方案有点尴尬。除了我提出的问题外,我将场所界面更改为抽象类:
来自
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将使用特定类型存储数据。