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.总结一下

问题的根本原因其实也没解析出来,但是知道,这个是子接口,父接口的泛型约束问题;可以通过调整泛型解决!

后续,进一步研究一下,再后补。

原文地址:https://www.cnblogs.com/perferect/p/12779654.html