toString()을 구현할 때 reflection을 사용하는 것이 의미가 있습니까?
@Override
public String toString() {
return new Gson().toJson(this);
}
모델 오브젝트의 디폴트 동작으로서 「조슈아 패턴」, 「일반 디자인 패턴」, 또는 그 외의 규약을 위반하고 있는 것일까요.
toString()
어쨌든 현재 사용하고 있는 패러다임(Android)의 디버깅에만 사용됩니다.이것이 바로 제가 JSON에서 오브젝트를 보는 것을 좋아하는 이유이기도 합니다.이는 많은 ORM/json 지속성이 http->php/python->mysql과 로컬 SQLite를 통해 발생하기 때문입니다.
네. GSON/Jackson/Reflections 라이브러리를 사용하여 toString() 메서드를 구현해도 괜찮습니다.
toString 메서드를 구현하는 방법은 거의 없습니다.
리플렉션(Apache 라이브러리)
@Override public String toString(){ return org.apache.commons.lang3.builder.ReflectionToStringBuilder.toString(this); }
JSON 기반 구현(GSON, Jackson 라이브러리)
// GSON library for JSON @Override public String toString(){ return new com.google.gson.Gson().toJson(this); } // Jackson libabry for JSON/YAML @Override public String toString() { try { return new com.fasterxml.jackson.databind.ObjectMapper().writerWithDefaultPrettyPrinter().writeValueAsString(this); } catch (com.fasterxml.jackson.core.JsonProcessingException e) { e.printStackTrace(); } return null; }
ToStringBuilder(apache-commons 라이브러리에서 사용 가능)
@Override public String toString() { return new org.apache.commons.lang3.builder.ToStringBuilder(this). append("field1", field1). append("field2", field2). toString(); }
하드코어 toString() 실장
@Override public String toString() { return new StringBuilder() .append("field1:"+field1) .append("field2:"+field2) .toString(); }
Lombok 주석 : 컴파일 시 toString()을 생성합니다.
import lombok.ToString; @ToString public class ToStringExample {}
이렇게 해도 나쁠 건 없다.이 경우, 데이터 전송에 대한 정적 변수를 생성할 것을 제안합니다.Gson
예를 들어 예쁜 인쇄를 활성화합니다.
static Gson gson = new GsonBuilder().setPrettyPrinting().create();
이 방법으로 출력은toString
메서드가 포맷됩니다.
메모: 그 GSon 예쁜 인쇄를 toString() 메서드로 사용하면 새로운 행으로 가득 차기 때문에 디버거에서 가비지처럼 보일 수 있습니다.
(Sorry는 위에 언급할 만한 충분한 정보가 없습니다.)
Gson은 자기성찰을 사용하여 인쇄할 필드를 결정하기 때문에 성능에 좋지 않습니다.
그것 말고는 괜찮은 것 같아요.이는 표준 Java toString 구현은 아니지만, 이를 변경하는 것이 안티패턴이라고는 생각하지 않습니다.
언급URL : https://stackoverflow.com/questions/16527932/does-it-make-sense-to-use-reflection-when-implementing-tostring
'programing' 카테고리의 다른 글
Windows Server 2016에서 WordPress에 디렉터리 wp-content를 만들 수 없습니다. (0) | 2023.04.01 |
---|---|
Larabel 및 Wordpress가 동일한 서버/도메인 상에 있음 (0) | 2023.04.01 |
Spring Boot application.properties를 프로그래밍 방식으로 덮어쓰려면 어떻게 해야 합니까? (0) | 2023.04.01 |
Spring MVC 컨트롤러 메서드에서 GET HTTP 요청의 파라미터 값을 취득하려면 어떻게 해야 합니까? (0) | 2023.04.01 |
AngularJs가 반복 실행을 너무 많이 브로드캐스트합니다. (0) | 2023.04.01 |