abel533 / Mapper

Mybatis Common Mapper - Easy to use
https://mybatis.io
MIT License
7.32k stars 1.63k forks source link

特定场景下报java.lang.ClassCastException #886

Closed samyge closed 1 year ago

samyge commented 1 year ago

问题位于tk.mybatis.mapper.mapperhelper.MapperTemplate.getEntityClass(MappedStatement)函数中的 Class<?> returnType = (Class<?>) t.getActualTypeArguments()[0];

经测试,以下场景会触发

  1. 当泛型信息任然为泛型信息时,如 public interface MyMapper extends Mapper<Info<?> 此时t.getActualTypeArguments()[0]的实际类型为:ParameterizedType
  2. 当泛型信息为泛型数组时,如 interface MyMapper<T> extends Mapper<T> 此时t.getActualTypeArguments()[0]的实际类型为:TypeVariable
  3. 当泛型信息为泛型数组时,如 interface MyMapper<T> extends Mapper<T[]> 此时t.getActualTypeArguments()[0]的实际类型为:GenericArrayType

实际使用中,场景1容易发生,场景2和3相对少见,但根据报出来的异常很难发现问题