IT TIP

GSON은 왜 getter / setter가 아닌 필드를 사용합니까?

itqueen 2020. 10. 29. 20:20
반응형

GSON은 왜 getter / setter가 아닌 필드를 사용합니까?


GSON이 필드 (개인, 공개, 보호) 사용하는 이유는 무엇 입니까? GSON에게 게터와 세터 만 사용하도록 지시하는 방법이 있습니까?


일반적으로 객체를 직렬화 / 역 직렬화 할 때 객체 상태의 정확한 사본이 생성됩니다. 따라서 일반적으로 OO 디자인에서 일반적으로 원하는 캡슐화를 우회하려고합니다. 캡슐화를 우회하지 않으면 역 직렬화 후 직렬화 이전과 똑같은 상태를 갖는 개체로 끝나지 않을 수 있습니다. 또한 특정 속성에 대한 setter를 제공하지 않으려는 경우를 고려하십시오. getter 및 setter를 통해 작업하는 경우 직렬화 / 역 직렬화는 어떻게 작동해야합니까?


GSON에게 게터와 세터 만 사용하도록 지시하는 방법이 있습니까?

아직.

에서 설계 문서 :

속성을 지원하는 좋은 주장도 여기에 있습니다. Json 필드를 표시하기위한 대체 매핑으로 속성을 지원하기 위해 후자의 버전에서 Gson을 향상시킬 계획입니다. 현재 Gson은 필드 기반입니다.


Gson을 패치 하여 getter사용할있습니다 .


이것이 우리 앱에서 어떻게 작동하는지에 대한 모호한 개요는 우리가 많은 TypeAdapter구현을 가지고 있다는 것입니다. 일부는 특정 값과 유사한 객체에 대한 것이고 일부는 JavaBeans 로직이 작동 할 것이라는 것을 알고있는 빈 스타일 객체에 대한 것입니다. 그런 다음 오브젝트 GsonBuilder를 만들기 전에이 모든 것을에 잼 Gson합니다.

불행히도 GSON은 Object[]. 메소드 매개 변수를 표현하기 위해 JSON 객체를 만들려고 할 때 주로 이것을 보았습니다. 이에 대한 해결 방법 TypeAdapter은 메서드를 반영하는 사용자 지정 인스턴스 를 만드는 것 입니다. (이것은 Gson호출하려는 메서드 당 하나의 인스턴스 를 사용하게됨을 의미합니다 ...)

참고 URL : https://stackoverflow.com/questions/6203487/why-does-gson-use-fields-and-not-getters-setters

반응형