GSON: Deserialize: List: Как игнорировать значение null или преобразовать в пустой список? [Дубликат]

Порядок, в котором указаны взаимозависимые связанные библиотеки, неверен.

Порядок, в котором связаны библиотеки, имеет значение, если библиотеки зависят друг от друга. В общем случае, если библиотека A зависит от библиотеки B, тогда libA ДОЛЖЕН появляться перед libB в флагах компоновщика.

Например:

// B.h
#ifndef B_H
#define B_H

struct B {
    B(int);
    int x;
};

#endif

// B.cpp
#include "B.h"
B::B(int xx) : x(xx) {}

// A.h
#include "B.h"

struct A {
    A(int x);
    B b;
};

// A.cpp
#include "A.h"

A::A(int x) : b(x) {}

// main.cpp
#include "A.h"

int main() {
    A a(5);
    return 0;
};

Создайте библиотеки:

$ g++ -c A.cpp
$ g++ -c B.cpp
$ ar rvs libA.a A.o 
ar: creating libA.a
a - A.o
$ ar rvs libB.a B.o 
ar: creating libB.a
a - B.o

Скомпилируйте:

$ g++ main.cpp -L. -lB -lA
./libA.a(A.o): In function `A::A(int)':
A.cpp:(.text+0x1c): undefined reference to `B::B(int)'
collect2: error: ld returned 1 exit status
$ g++ main.cpp -L. -lA -lB
$ ./a.out

Чтобы повторить снова, порядок имеет значение!

27
задан zdesam 28 August 2013 в 16:09
поделиться

3 ответа

19
ответ дан Sotirios Delimanolis 26 August 2018 в 13:46
поделиться
5
ответ дан Stan 26 August 2018 в 13:46
поделиться

Мне кажется, проблема не в gson. Gson правильно отслеживает разницу между нулевой и пустой строкой. Вы уверены, что хотите стереть это различие? Вы уверены, что все классы, использующие TestObject, не заботятся?

Что вы могли бы сделать, если вам не нужна разница, это изменить пустые строки до нуля в TestObject до его сериализации. Или лучше, сделайте сеттеры в TestObject таким образом, чтобы пустая строка была равна нулю; таким образом вы строго определяете внутри класса, что пустая строка совпадает с нулевой. Вы должны убедиться, что значения не могут быть установлены за пределами сеттеров.

3
ответ дан toto2 26 August 2018 в 13:46
поделиться
Другие вопросы по тегам:

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