簡體   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