![](/img/trans.png)
[英]Java type casting. Logic behind (String), .toString() and “” + int
[英]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.