2013-02-18 3 views
1

В приведенной ниже службе я пытаюсь инициализировать мой Dao и вводить в него EntityManager. Мы не используем весну для этого проекта. Моя IDE жалуется на вызов setEntityManager(), потому что он не может признать, что объект всегда равен GenericDao. Это правильный способ сделать это?Как вызвать метод для общего типа определенного типа

public class GenericService<T, Dao> { 

    private static Logger logger = Logger.getLogger(Logger.class.getName()); 

    protected Dao dao; 
    protected EntityManager em; 

    public GenericService(Class<Dao> daoClass) { 
     try { 
      dao = daoClass.newInstance(); 

      EntityManagerFactory emf = Persistence.createEntityManagerFactory("unit"); 
      em = emf.createEntityManager(); 

      dao.setEntityManager(em); 

     } catch(InstantiationException e) { 
      logger.log(Level.SEVERE, "Unable to initialize DAO: {1}", daoClass.getClass()); 
     } catch(IllegalAccessException e) { 
      logger.log(Level.SEVERE, "Unable to initialize DAO: {1}", daoClass.getClass()); 
     } 
    } 
} 

ответ

2

Вы можете использовать бросок:

((GenericDao)dao).setEntityManager(em); 

Но я думаю, что если вы знаете, что это всегда GenericDao, почему бы не просто сделать это тот тип, чтобы начать с, например,

protected GenericDao dao; 

И изменить объявление класса, а также:

public class GenericService<T, GenericDao> 
+1

Хороший вызов ... то, что мне нужно было 'общественного класса GenericService {' – Webnet