Перечисления Kotlin не могут быть разыграны после десериализации - PullRequest
0 голосов
/ 12 октября 2018

У меня есть класс данных с картой в нем.Одним из значений, хранящихся на карте, является класс перечисления Kotlin.

public enum SecurityRole
{
    User,
    Admin
}

Кажется, что он сериализован и десериализован правильно, но когда я пытаюсь вытащить его из карты и привести к нужному типу, с исключением:

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

Глядя на это в отладчике, он выглядит совершенно нормально, все данные есть, это просто не имеет смысла!Я пытался использовать Java-сериализацию с ним, FST-сериализацию, Klaxon JSON-сериализацию, все они не в состоянии десериализовать эту вещь способом, который потом можно откалибровать, что я делаю неправильно!

1 Ответ

0 голосов
/ 12 октября 2018

Это происходит, когда SecurityRole загружается с двумя разными ClassLoader с.Даже если они относятся к одному и тому же классу, загруженный объект Class не является тем же экземпляром .В большинстве случаев решение состоит в том, чтобы создать экземпляр самого ClassLoader, а другой ClassLoader должен быть родительским.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...