2015-02-06 3 views
-1

Я создаю службу сравнения, которая сравнивает два объекта и генерирует результаты, включая то, что является другой частью. Объект сравнения результатов будет отображаться в JSON и вернуться к службе REST.Как создать объект, который включает неопределенные поля

public class CompareResult { 

private final String errorCode; 
private final String codeName; 
private final Map<String, T> compareResult; 

setter, getter 
} 

Поскольку объект я сравню является сложным, и он может содержать много разностных мешков, например: ObjectToBeCompared объекта включает в себя 3 поле, которые являются три другими объектом 1,2,3. Если объект 2 имеет разницу между objectToBeCompared1 и objectToBeCompared2, то я хочу, чтобы скопировать объект 2 в compareResult поле:

compareResult.put("Object2InObjectToBeCompared1", ObjectToBeCompared1.Object2), 
compareResult.put("Object2InObjectToBeCompared2", ObjectToBeCompared2.Object2) 

и T может быть объектом 1 или объект 3.

Я знаю, что это может иметь какое-то отношение к родовому типу, но я просто не знаю, как это реализовать. Проще говоря, в поле, которое я определил в классе CompareResult, то compareResult является Карта и T может быть любой объект. Могу ли я использовать Map, если это так, когда я использую объект objectMapper для отображения с объекта на строку JSON String, это вызовет какие-либо проблемы?

ответ

0

compareResult является карта, и T может быть любой объект

Поскольку вы не хотите ставить какие-либо ограничения на тип, я думаю, что это будет отличная идея отказаться от дженериков.

Вы можете сделать что-то вроде

private final Map<String, Object> compareResult; 

В ответ на ваш второй вопрос будет нет, ObjectMapper должно работать нормально.

Надеюсь, это поможет.

+0

Спасибо, поэтому, когда я создаю объект CompareResult, в переменной-члене я могу создать любую карту, такую ​​как Map <"object1", object1>, Map <"object2", object2>. Поскольку я не являюсь владельцем объекта 1 и object2, мне не нужно вносить какие-либо изменения, верно? и когда я сериализую CompareResult в JSON String, я просто использую mapper.writeValueAsString (CompareResult)? – Terry

+0

Я имею в виду, если я хочу поставить Object1, Object 2 как значение любой строки на карте. Мне не нужно что-либо делать с Object1 или 2? потому что я не могу их изменить. Я не являюсь владельцем объекта, который я сравниваю. – Terry

+0

Вам просто нужны ссылки на эти объекты. На карте должны храниться только ссылки, и объекты не будут изменены. Сериализация также не изменила бы объекты. –

Смежные вопросы