本文主要是介绍Java |「泛型类型擦除后类型信息被丢失」是指什么,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Java的泛型是通过类型擦除来实现的,这意味着在编译期间泛型类型信息会被擦除掉。例如,对于泛型类List<T>
,在编译时会被转换为List<Object>
,并且在运行时,List对象中的元素类型信息也会被擦除。因此,在运行时,不能确定List中存储的具体类型是什么。
这种类型擦除可能导致一些问题。例如,如果在泛型方法中尝试使用T的类型信息,那么在运行时,该类型信息将不再可用。此外,如果尝试使用反射获取泛型类型的信息,也可能会遇到类似的问题。
-
遇到的坑:
Mockito (Spock没有这个问题) Mock方法
PortalRepayPlanResponseV1 buildPortalRepayPlanResponseV1(List<PortalRepayPlanDTO> repayPlanList, List<AmountInfoDTO> amountInfoList)
❌ Mock无效:Mockito.doReturn(new EasyRandom().nextObject(PortalRepayPlanResponseV1.class)).when(portalDebtService).buildPortalRepayPlanResponseV1(_ as List<
PortalRepayPlanDTO
>, _ as List<AmountInfoDTO
>)✅:Mockito.doReturn(new EasyRandom().nextObject(PortalRepayPlanResponseV1.class)).when(portalDebtService).buildPortalRepayPlanResponseV1(
ArgumentMatchers.anyList()
,ArgumentMatchers.anyList()
)
这篇关于Java |「泛型类型擦除后类型信息被丢失」是指什么的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!