javagenericsdaogenericdao

Java DAO factory dynamic returned object type


I'm trying to write simple DAO that will create entity objects based on their type stored in String field. How to return type that is changed dynamicly? Method findById() of UserDAO class should return User class object. Same method for ProductDAO should return Product. I don't want to implement findById in every class that extends DAO, it should be done automatically.

Example code:

class DAO {
   protected String entityClass = "";
   public (???) findById(int id) {
      // some DB query
      return (???)EntityFromDatabase; // how to do this?
   }
}
class UserDAO extends DAO {
   protected String entityClass = "User";
}
class ProductDAO extends DAO {
   protected String entityClass = "Product";
}
class User extends Entity {
   public int id;
   public String name;
}

Solution

  • Modify it to

    class DAO<T> {
       //   protected String entityClass = "";
       public T findById(int id) {
    
          return (T)EntityFromDatabase; // how to do this?
       }
    }
    class UserDAO extends DAO<User> {
       //protected String entityClass = "User";
    }
    class ProductDAO extends DAO<Product> {
       //protected String entityClass = "Product";
    }
    class User extends Entity {
       public int id;
       public String name;
    }