sun.reflect.generics.reflectiveObjects.TypeVariableImpl cannot be cast to java.lang.Class


1.首先,問題出現的點是在泛型

我出現問題的原因是,和泛型有關系,要調整泛型

2.我把問題出現的過程描述一哈子

1.基礎類

 

@tk.mybatis.mapper.annotation.RegisterMapper
public interface BaseModelMapper<T extends BaseModel> extends Mapper<T>,BaseExtraMapper<T> {
}

2.在基礎mapper上面進行封裝

public interface DataSyncMapper<T extends BaseModel> extends BaseModelMapper<T>{
    public List<T> selectList();
}

3.service層中調用

@Transactional
public class DataSyncServiceImpl<T extends BaseModel,Mapper extends DataSyncMapper >
        extends BaseModelServiceImpl<T>
        implements IDataSyncService<T,Mapper> {
}

4.然后就很尷尬的出現了上面的問題

 

 但是可以看到,這個也是因為Mapper泛型的原因,繼承的Mapper再進行泛型,就會有錯誤。但是深層次的問題,沒有研究也不知道

3.我的解決過程

1.把基礎的Mapper封裝去掉,單獨一個Mapper

public interface DataSyncMapper<T extends BaseModel>{
    public List<T> selectList();

}

2.service實現的泛型,調整約束

public class DataSyncServiceImpl<T extends BaseModel,Mapper extends DataSyncMapper & BaseModelMapper>
        extends BaseModelServiceImpl<T>
        implements IDataSyncService<T> {
}

將約束條件變成同時滿足繼承DataSyncMapper,BaseModelMapper;

4.總結一下

問題的根本原因其實也沒解析出來,但是知道,這個是子接口,父接口的泛型約束問題;可以通過調整泛型解決!

后續,進一步研究一下,再后補。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM