List 如何引用具有BigInteger值的ArrayList

问题描述 投票:0回答:1

此方法在JpaRepository中定义,并运行本机PostgreSQL查询。

List<Long> distributorIds = distributorRepository
.findDistributorIdsWithChildren(distributorId)

它无例外运行,并且在运行时,我在返回的distributorIds ArrayList中看到BigInteger值,而不是Long值

与此问题相同:Bug in Spring Data JPA: Spring Data returns List<BigInteger> instead of List<Long>

那么该错误怎么发生?我的意思是JAVA如何允许此操作?如果Java不检查这种类型错误,那不是Java中泛型的问题。

注意:我还检查了Long和BigInteger的类型层次结构,并且没有子/超类关系。

java spring-boot casting spring-data generic-collections
1个回答
2
投票

通用类型检查是编译时功能。在运行时,所有类型信息都会丢失。请参阅“类型擦除”。例如,如果将使用非泛型集合的旧版API映射到使用泛型且需要强制转换集合的API,那么您看到的行为就很容易发生。如果不幸的是,该集合包含意外类型的对象,您将只能在运行时查找。

© www.soinside.com 2019 - 2024. All rights reserved.