为什么在两个类型相同的赋值过程中会出现这个ClassCastException?(Groovy / Hibernate)

r55awzrz  于 2022-11-01  发布在  其他
关注(0)|答案(1)|浏览(132)

我定义了以下类:

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呢?

mv1qrgav

mv1qrgav1#

因为farm参数是一个Hibernate实体,所以它可能是一个HibernateProxy示例,您可能会认为会出现一个显式异常,但由于某种原因,在这种情况下,您会得到我上面发布的ClassCastException。如果您运行调试器并查看代码,您将看到赋值的两端确实是完全相同的类,但是如果farm示例确实是代理对象,则它将是Farm$HibernateProxy$...类型。
只需打开代理,您将避免此错误:-)

相关问题