Gson не работает с родительским классом в Java - PullRequest
0 голосов
/ 04 июля 2018

У меня есть три класса UserMini, User и Reply. Пользователь расширяет UserMini, и в ответе содержится один объект UserMini, а также содержимое и другая информация.

Объект UserMini (this.user) создается в классе Reply следующим образом:

private void getUserObject () {
   this.user = (UserMini)new User(email, fname,  lname, userid...);
}

Класс UserMini хранит только имена и имена пользователей.

Я хочу сделать следующее: вернуть значение JSON класса Reply со всей информацией в нем. Я делаю это с помощью следующего кода в классе ответа:

@Override
public String toString() {
    return new Gson().toJson(this);
}

Это отлично работает, отображение JSON всего, что хранится в объекте Reply. Но для объекта UserMini Ответа выводится следующее значение:

user:
    accessToken: "0",
    email: "email@gmail.com",
    firstName: "FirstName",
    lastName: "LastName",
    picturePath: "Pic_path",
    refreshToken: "0",
    userId: "2"

Как вы видите, я храню родительский объект в классе Reply, и Gson выводит свойства потомка, несмотря на это.

Я хочу избежать использования адаптеров Gson, есть ли другой способ заставить Gson выводить следующее значение для объекта MiniUser:

user:
    firstName: "FirstName",
    lastName: "LastName"

1 Ответ

0 голосов
/ 04 июля 2018

Gson использует метод getClass() для определения типа объекта. Отражение во время выполнения. getClass() возвращает фактический тип времени выполнения объекта и не объявленный изначально статический тип переменной. Преобразование не изменяет тип переменной, просто указывает компилятору обрабатывать переменную так же, как она другого типа. После потери приведения к компиляции в скомпилированной программе нет информации о приведениях, сделанных в коде.

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