2014-05-23 6 views
2

난 그냥 데이터베이스 (ORMLite API), 나는 그것이 메이븐을 사용하고잘못된 추론 유형

invalid inferred types for D; inferred type does not conform to declared bound(s) 
[ERROR] inferred: com.j256.ormlite.dao.RuntimeExceptionDao<T,U> 
[ERROR] bound(s): com.j256.ormlite.dao.RuntimeExceptionDao<capture#2 of ?,?> 

내가 JDK 1.6를 구축하려고 프로세스가 컴파일에 실패 구축 컴파일 위의 몇 가지 일반 도우미를 쓰기 위해 노력하고있어 및 또한 1.7. 여기

public class BaseDbHelper<T,U> extends DatabaseHelper<T, U> { 

    private Dao<T, U> dao = null; 
    private RuntimeExceptionDao<T, U> runtimeDao = null; 
    Class<?> entityClass; 

    public BaseDbHelper(Context context) { 
     super(context); 
     entityClass = (Class<?>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]; 
    } 

    @Override 
    public Dao<T, U> getDao() throws SQLException { 
     if (dao == null) { 
      // !!! ERROR 
      dao = getDao(entityClass); 
     } 
     return dao; 
    } 

    @Override 
    public RuntimeExceptionDao<T, U> getDataDao() { 
     if (runtimeDao == null) { 
      // !!! ERROR 
      runtimeDao = getRuntimeExceptionDao(entityClass); 
     } 
     return runtimeDao; 
    } 

} 

은 라인에서 두 개의 상위 클래스의 서명이 오류가 표시됩니다

당신은 아마이 경우 형식 인수를 해결하기 위해 TypeTools 같은 것을 사용해야합니다
public <D extends com.j256.ormlite.dao.RuntimeExceptionDao<T,?>, T> D getRuntimeExceptionDao(java.lang.Class<T> clazz) { } 

public <D extends com.j256.ormlite.dao.Dao<T,?>, T> D getDao(java.lang.Class<T> clazz) throws java.sql.SQLException { } 
+0

는'entityClass'는'클래스 '와'dao'이 유형 인 '다오 'getDao''의 결과가 명확하게'다오 와 일치하지 않는 유형'다오 '이 될 것입니다 때문에'타입이다, 왜냐하면 컴파일러는 단순히'? '타입이 무엇인지 알지 못하기 때문이다. – Smutje

답변

1

:

public BaseDbHelper() { 
    entityClass = TypeResolver.resolveRawArguments(BaseDbHelper.class, getClass())[0]; 
} 

참고 :값을 유형 정의에서 캡처 할 수 있도록 BaseDbHelper가 서브 클래 싱되는 경우에만 작동합니다 :

public BasePersonHelper extends BaseDbHelper<Person, PersonDAO> {} 

그렇지 않으면 T의 값을 런타임에 검색 할 수 없습니다.