数据访问对象模式与抽象工厂,创建通用类型
我正在开发Android设备的数据库应用程序。 我需要做的第一件事就是创建数据访问层。 为此,我想在抽象工厂中使用DAO模式。数据访问对象模式与抽象工厂,创建通用类型
对于所有的DAO我有一个接口女巫包含所有数据对象需要实现的声明。 (在我的情况下:IDataObject)
特定的DAO都由其自己的接口表示,扩展了所有DAO的基本接口。
基本接口:
public interface IDataObject {
public IDataId getId();
public void write() throws MyDataWriteException;
public void validate() throws MyDataValidException;
}
一个扩展:
public interface IDataSample1 extends IDataObject {
public void setNotice(String notice);
public String getNotice();
public void setDate(Date date);
public Date getDate();
}
要创建我想用抽象的使用抽象的工厂,像一个数据对象:
public interface IDataFactory<Template extends IDataObject> {
public List<Template> getAll();
public Template get(IDataId id);
public List<Template> getList(DataAccessArgument arg);
public List<Template> getList(List<DataAccessArgument> argList);
}
和实施:
public class DataSample1Fac implements IDataFactory<IDataSample1> {
public DataSample1Fac() {
}
public List<IDataSample1> getAll() {
return null;
}
public IDataSample1 get(IDataId id) {
return null;
}
public List<IDataSample1> getList(DataAccessArgument arg) {
return null;
}
public List<IDataSample1> getList(List<DataAccessArgument> argList) {
return null;
}
}
我没有得到任何错误,到目前为止,但现在我想实现一个工厂生成器:
public class DataFactoryBuilder {
private DataFactoryBuilder() {
}
public static<T extends IDataObject> IDataFactory<T> getFactory(){
if (T instanceof IDataSample1)
return new DataSample1Fac();
return null;
}
}
我收到以下错误(8号线):
T cannot be resolved to a variable
和(第9行)
Type mismatch: cannot convert from DataSample1Fac to IDataFactory<T>
不知道如何解决这个问题,有什么建议吗?
我会重构你的DataFactoryBuilder到类似的东西:
class DataFactoryBuilder {
private DataFactoryBuilder() {
}
public static IDataFactory<? extends IDataObject> getFactory(Class<? extends IDataObject> clazz){
if (IDataSample1.class.isAssignableFrom(clazz)) {
return new DataSample1Fac();
}
return null;
}
}
这非常接近我所需要的,谢谢。 当我创建te fac时,出现以下错误: 无法从捕获#1中转换?将IDataObject扩展为IDataSample1 – canisLupusLupus 2014-11-03 17:02:04
你是如何得到这个错误的?像这样的DataSample1Fac fac = DataFactoryBuilder.getFactory(IDataSample1.class);?您应该使用IDataFactory > fac = DataFactoryBuilder.getFactory(IDataSample1。类); – kaos 2014-11-03 20:25:06
这不是问题。当我调用fac.get()时,比我得到这个错误。 – canisLupusLupus 2014-11-04 09:57:18
我得到了以下解决方案:
public static <T extends IDataObject> IDataFactory<T> getFactory(Class<T> type) {
if (IDataSample1.class.isAssignableFrom(type)) {
DataSample1Facfac = new DataSample1Fac();
return (IDataFactory<T>) fac;
}
}
,但我得到上警告:回报(IDataFactory)FAC;
Type safety: Unchecked cast from DataSample1Fac to IDataFactory<T>
我认为是没有问题的,我必须剿它
我尝试: 公共静态 IDataFactory getFactory(类类型){ 如果(T = = IDataSample1.class) return new DataSample1Fac(); 返回null; } 但我得到相同的错误 –
canisLupusLupus
2014-10-31 10:07:27
T只是一个关于类型的信息。这不是一个对象本身,所以你不能调用它的方法。 – kaos 2014-10-31 11:34:07