class Device {} class Router extends Device {} class GenericDAO { protected Class persistentClass; protected Class idClass; private GenericDAO() { List typeParameters = new TypeResolver().resolve(this.getClass()).typeParametersFor(GenericDAO.class); this.persistentClass = (Class) typeParameters.get(0).getErasedType(); this.idClass = (Class) typeParameters.get(1).getErasedType(); } } class DeviceDAO extends GenericDAO {} class RouterDAO extends DeviceDAO {} @Test public void resolvesEntityType () { RouterDAO routerDAO = new RouterDAO(); assert routerDAO.persistentClass == Router.class; assert routerDAO.idClass == Long.class; }