繁体   English   中英

DAOFactory自动类型铸造。 java的

[英]DAOFactory automatic type casting. java

我有一个DAOFactory可以返回一个特定的dao

public class DAOFactory {

public static final int DAO1 = 1;
public static final int DAO2 = 2;

public static Object getDao(int dao) {
        switch (dao) {
            case DAO1:
                return new Dao1();
            case DAO2:
                return new Dao2();
        }
        return null;
    }
}

道是的孩子

abstract class GenericDao<E, ID extends Serializable> implements
        GenericDaoInterface<E, ID>

所以看起来像:

public class Dao1 extends GenericDao<Dao1, Integer>{
....
}

如果我创建新的dao。 我必须做类型转换。

Dao1 dao = (Dao1) DAOFactory.getDao(DAOFactory.DAO1);

是否可以进行自动类型转换,还是最好在DAOFactory中使方法调用特定的dao? 例如。 public static Dao1 getDao1()

创建一个接口IGenericDao并在GenericDao上实现,工厂必须返回IGenericDao接口,这样您可以使用所有Dao的泛型行为,或在需要时将其强制转换为特定类型,使用Class代替工厂参数的int方法。

公共静态IGenericDao getDao(Class)

仅使用一种方法的另一个原因是,在将来的实现中,您可以使用反射来实现工厂,并返回正确的类型,而无需更改工厂的所有客户。

您可以将“ int”参数更改为“ Class”,然后使用泛型返回该类的内容。
但这仅在有时您的代码不知道它将使用什么DAO类时才有用,例如某些通用代码需要从工厂获取任意DAO子类型。

如果您的代码非常具体,则可以创建您提到的那些特定方法。

恕我直言,人们迷上了仿制药。
有时,泛型代码看起来很可怕,而一两个类型的转换很好,通常更可取。 正如我所说的,恕我直言。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM