Как скопировать и изменить объекты класса POJO, созданные ответом JSON из Retrofit2.0
Например, я получаю следующий ответ JSON:
{
"metadata": {
"provider": "ABC"
},
"results": [
{
"id": "ace",
"language": "en",
"lexicalEntries": [
{
"lexicalCategory": "Noun"
},
{
"lexicalCategory": "Adjective"
},
{
"lexicalCategory": "Verb"
}
],
"type": "headword",
"word": "ace"
}
]
}
Я использую Retrofit2.0 и gson для его анализа и сопоставления с классами POJO следующим образом:
class QueryResponse {
public Metadata metadata;
public List<Result> results = null;
}
class Result {
public String id;
public String language;
public List<LexicalEntry> lexicalEntries = null;
public String type;
public String word;
}
class LexicalEntry {
public String lexicalCategory;
}
OnResponse() выглядит так:
@Override
public void onResponse(Call<QueryResponse> call, Response<QueryResponse> response) {
if (response.code() == 200) {
Result result = response.body().results.get(0);
lexicalEntries = result.lexicalEntries;
}
}
Теперь у меня есть другой метод, в котором я хочу создать свой собственный новый объект LexicalEntry (а именно, updatedLexicalEntry) и скопировать значение из того, что было получено из JSON, а затем изменить его по-своему для дальнейшего использования.
private void createSubWords(List<LexicalEntry> lexicalEntries) {
LexicalEntry revisedLexicalEntry;
for (int x = 0; x < lexicalEntries.size(); x++) {
revisedLexicalEntry = lexicalEntries.get(x);
revisedLexicalEntry.lexicalCategory = "Something...";
}
}
Что происходит, когда позже я пытаюсь получить lexicalCategory исходного JSON (lexicalEntries.get(x).lexicalCategory), он также изменяется на "Something..." вместо того, что было его первоначальным значением.
Как я могу достичь своей цели - сохранить ценность оригиналов, но скопировать и изменить ее для дальнейшего использования? Я просто надеюсь, что прояснил свой вопрос.
Заранее спасибо!
PS, фактический JSON, с которым я работаю, гораздо сложнее, но я упростил его здесь для лучшего понимания и более быстрых предложений.
1 ответ
Как я могу достичь своей цели - сохранить ценность оригиналов, но скопировать и изменить ее для дальнейшего использования?
Сделать новый LexicalEntry
объект с вашим новым значением, а не изменять существующий объект, как вы делаете сейчас.