我定义了以下类:
enum FruitTypeEnum {
APPLE,
BANANA,
NONE
}
// POGO
class FruitDTO {
FruitTypeEnum fruitType
}
// Hibernate Entity
abstract class Farm {
FruitTypeEnum fruitType
}
private getFruitDTO(Farm farm) {
def fruitDTO = new FruitDTO()
fruitDTO.fruitType = farm.fruitType
fruitDTO
}
当我尝试执行getFruitDTO
函数时,赋值fruitDTO.fruitType = farm.fruitType
有50%的情况会抛出以下异常:
java.lang.IllegalArgumentException: java.lang.ClassCastException@564a5444
at FarmController.getFruitDTO(FarmController.groovy:126)
我已经附加了调试器,并验证了赋值语句的左侧和右侧都是相同的数据类型。那么我如何获得ClassCastException
呢?
1条答案
按热度按时间mv1qrgav1#
因为
farm
参数是一个Hibernate实体,所以它可能是一个HibernateProxy
示例,您可能会认为会出现一个显式异常,但由于某种原因,在这种情况下,您会得到我上面发布的ClassCastException
。如果您运行调试器并查看代码,您将看到赋值的两端确实是完全相同的类,但是如果farm
示例确实是代理对象,则它将是Farm$HibernateProxy$...
类型。只需打开代理,您将避免此错误:-)