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

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

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

  • 相关阅读:
    计算排名人数
    显示出现次数
    正负数用不同颜色显示
    根据日期计算财政年度
    Sumifs函数区域参数的脾气
    HTTPPrint打印服务
    flutter心跳任务
    flutter开发Window应用
    flutter 强制屏幕坚屏显示
    flutter FutureBuilder应用
  • 原文地址:https://www.cnblogs.com/perferect/p/12779654.html
Copyright © 2020-2023  润新知