Java, как сериализовать List & lt; superclass & gt; содержащих подклассы? [Дубликат]

Angular1

Для людей, которые используют AngularJS , может справиться с этой ситуацией, используя Promises.

Здесь it говорит,

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

Вы можете найти приятное объяснение здесь .

Пример, найденный в docs , упомянутом ниже.

  promiseB = promiseA.then(
    function onSuccess(result) {
      return result + 1;
    }
    ,function onError(err) {
      //Handle error
    }
  );

 // promiseB will be resolved immediately after promiseA is resolved 
 // and its value will be the result of promiseA incremented by 1.

Angular2 and Later

In Angular2, посмотрите на следующий пример, но его рекомендовал использовать Observables с Angular2.

 search(term: string) {
     return this.http
  .get(`https://api.spotify.com/v1/search?q=${term}&type=artist`)
  .map((response) => response.json())
  .toPromise();

}

Вы можете использовать это таким образом,

search() {
    this.searchService.search(this.searchField.value)
      .then((result) => {
    this.result = result.artists.items;
  })
  .catch((error) => console.error(error));
}

См. здесь оригинал . Но TypScript не поддерживает native es6 Promises , если вы хотите его использовать, для этого вам может понадобиться плагин.

Кроме того, здесь представлены обещания spec определите здесь.

16
задан scompt.com 9 October 2014 в 07:48
поделиться

3 ответа

в соответствии с Serializable javadoc

Во время десериализации поля несериализуемых классов будут инициализированы с использованием открытого или защищенного конструктора no-arg класса , Конструктор no-arg должен быть доступен для подкласса, который является сериализуемым. Поля сериализуемых подклассов будут восстановлены из потока.

также исключение сериализации генерируется только в том случае, если сериализуемый класс не сериализуется. наличие несериализуемых родителей в порядке (если у них нет конструктора no-arg). Сам объект не является Serializable, и все его расширяет. приведенная выше цитата также объясняет, почему вы получаете разные значения для поля значений - задан конструктор no-arg для родительского класса, который устанавливает значение в поле значения 10 - это поле принадлежит родительскому объекту (несериализуемым), поэтому его значение isnt записанный в / чтение из потока.

24
ответ дан stiemannkj1 27 August 2018 в 23:26
поделиться

Я не тестировал его, но вы получите NotSerializableException, если сериализуете экземпляр базового класса. Это то же самое, когда ваш класс содержит некоторые элементы, которые не являются Serializable.

Означает, что если вы создаете объект NewClass1 nc1 = new NewClass1(); и пытаетесь выполнить сериализацию obj nc1, вы получите требуемое исключение.

0
ответ дан PC. 27 August 2018 в 23:26
поделиться

Если ваш MyClass содержит ссылку на объект несериализуемого класса, вы получите исключение NotSerializable во время выполнения. Чтобы проверить, измените MyClass так, чтобы он содержал ссылку на объект NewClass1. Если вы запустите еще раз, это вызовет исключение.

Deserialization по существу создает экземпляр сериализуемого класса и восстанавливает его свойства. Во время этого процесса конструктор сериализуемого класса не вызывается. Вместо этого вызывается конструктор no arg первого несериализуемого суперкласса.

В вашем случае конструктор no arg newClass1 присваивает 10 своей переменной экземпляра i. Таким образом, во время десериализации она печатает 10 вместо 20.

3
ответ дан Sandeep Panda 27 August 2018 в 23:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: