此方法在JpaRepository中定义,并运行本机PostgreSQL查询。
List<Long> distributorIds = distributorRepository .findDistributorIdsWithChildren(distributorId)
它毫无例外 地运行 , 在运行时,我在返回的distributorIds ArrayList中看到BigInteger值,而不是Long值 。
那么,该错误如何发生?我是 说JAVA如何允许这样做 ?如果Java不检查这种类型的错误,那不是Java中泛型的问题。
注意:我还检查了Long和BigInteger的类型层次结构,并且没有子/超类关系。
泛型类型检查是编译时功能。在运行时,所有类型信息都会丢失。请参阅“类型擦除”。例如,如果将使用非泛型集合的旧版API映射到使用泛型且需要强制转换集合的API,则您看到的行为很容易发生。不幸的是,如果该集合包含意外类型的对象,您将只能在运行时找到它。