代码之家  ›  专栏  ›  技术社区  ›  Adam

Kotlin枚举在反序列化后无法强制转换

  •  2
  • Adam  · 技术社区  · 6 年前

    我有一个带地图的数据类。映射中存储的值之一是Kotlin枚举类。

    public enum SecurityRole
    {
        User,
        Admin
    }
    

    它的序列化和反序列化似乎是正确的,但当我尝试将它从映射中拉出并将其转换回正确的类型时,它例外:

    com.fff.security.SecurityRole cannot be cast to com.fff.security.SecurityRole
    

    在调试器中查看它,它看起来非常好,所有的数据都在那里,这完全没有意义!我试过用Java序列化,FST的序列化,Klaxon的JSON序列化,它们都没有以一种事后可以转换的方式反序列化这个东西,我做错了什么!

    1 回复  |  直到 6 年前
        1
  •  1
  •   Adam Arold    6 年前

    这种情况发生在 SecurityRole 装载了两个不同的 ClassLoader s。即使他们是同一个班级 Class 加载的对象不同 . 大多数情况下,解决方案是实例化 类装载器 拥有另一个 类装载器 作为父母。