CJC (1): ToStringBuilder 두 가지 방법 용법 의 장단 점 및 문제 - rmn 190 - ITeye 기술 사이트

3959 단어 StringBuilder
CJC (1): ToStringBuilder 두 가지 방법 용법 의 장단 점 및 문제 - rmn 190 - ITeye 기술 사이트
CJC (1): ToStringBuilder 두 가지 방법 용법 의 장단 점 과 문제
블 로그 분류:
  • Source Codes Study

  • 디자인 모드
    F#
    Security  
         CJC 는 Common Java Cookbook 의 줄 임 말 입 니 다. 이것 은 소개 ApacheCommon 오픈 소스 프로젝트 의 전자 책 입 니 다. 여기 서 CJC 는 제 가 그 소스 코드 에 대한 연 구 를 대표 하 는 시리즈 블 로 그 를 대표 합 니 다. 왜 그것 을 연구 해 야 합 니까?관심 이 있 으 면 다른 블 로 그 를 보 세 요.    이것 은 ApacheCommon 소스 코드 를 연구 하 는 첫 번 째 블 로그 입 니 다. 먼저 가장 간단 한 것 부터 시작 합 니 다. 즉, Object 류 의 toString 방법 을 중심 으로 자동화 되 는 일련의 유형 입 니 다.         어떻게 하면 toString 방법 을 자동화 할 수 있 습 니까? 두 가지 가 있 습 니 다. 반사 와 수 동 설정 입 니 다. 구체 적 인 호출 은 간단 하고 할 말 이 없 기 때문에 더 이상 군말 하지 않 겠 습 니 다. 다음은 그 장단 점 을 열거 하 겠 습 니 다.    반사 방법의 장점:        1. 코드 가 간결 해서 설정 이 필요 없습니다.        2, Model 속성 이 변 하면 tostring 방법 을 수 동 으로 변경 하지 않 아 도 됩 니 다.    단점:        1. 일부 속성 은 toString 에 게 입력 시 키 고 싶 지 않 습 니 다. (소 용이 없 을 수도 있 고 암호 적 인 측면 에서 고려 할 수도 있 습 니 다) 그러나 반사 시 모든 속성 값 이 졌 습 니 다. (이것 은 이미 해결 되 었 습 니 다. 아래 를 보 세 요. 하지만 해결 되 었 지만 다른 방식 보다 유연 하지 않 습 니 다.)        2, . , java private , toString , private . If your system is running under a restrictive SecurityManager, you may need to alter your configuration to allow Commons Lang to by pass these security restrictions. 자바 보안 문제 에 대해 아직 체득 하지 못 했 으 니, 지금 여기에 써 서 대비 안 을 작성 하고, 이후 주 의 를 환기 시 킵 니 다.    이 반사 에 비해 ToStringBuilder 로 직접 설정 하면 훨씬 유연 합 니 다.    다음은 반사 방법 으로 유연성 이 부족 한 확장 을 보완 하 는 것 입 니 다. 이것 은 제 가 처음 보 는 것 이기 때문에 여기에 두 고 기록 합 니 다. 한 가지 유형 에서 password 라 는 속성 이 있다 고 가정 하면 일반적인 상황 에서 toString 에 게 입력 하 게 하고 싶 지 않 지만 반사 로 기본 적 인 상황 에서 출력 합 니 다. 어떻게 합 니까?ReflectionToStringBuilder 소스 코드 에 있 는 문 서 를 보 았 을 때 이러한 확장 자 를 발 견 했 습 니 다. 하위 클래스 를 통 해 accept 방법 을 덮어 서 선별 합 니 다. 구체 적 으로 다음 과 같 습 니 다.
    자바 코드
     
  • public String toString() {  
  •       return (new ReflectionToStringBuilder(this) {// 여기 주의 하 세 요. 표현 상의 간결 함 을 위해 익명 내부 류 를 사 용 했 습 니 다.  
  •           protected boolean accept(Field f) {  
  •               return super.accept(f) && !f.getName().equals("password");  
  •           }  
  •       }).toString();  
  • }  
  • public String toString() {
          return (new ReflectionToStringBuilder(this) {//                    .
              protected boolean accept(Field f) {
                  return super.accept(f) && !f.getName().equals("password");
              }
          }).toString();
    }

     
    이렇게 하면 toString 에서 password 라 는 속성 을 건 너 뜁 니 다.    위 에 두 가지 방법의 장단 점 과 반사 시의 확장 을 기록 했다. 사실은 이 ToString Builder 를 연구 한 후에 세 가지 수확 이 있 는데 위 에 첫 번 째, 세 번 째 는 상대 적 으로 커서 다음 편 에 놓 을 수 밖 에 없다. 여기 서 두 번 째 수확 을 소개 한다.    수확 이 라 고 하 는 것 은 문제 이지 만 문 제 는 새로운 수확 의 시작 입 니 다. 문 제 는 다음 과 같 습 니 다. private 의 정적 내부 클래스 는 private 와 같은 방법 이 있 습 니 다. readResolve (ToString Style 의 내부 클래스 Default ToString Style 참조), 그럼 이 방법 은 무슨 소 용이 있 습 니까? 반사 하지 않 아 도 이 방법 은 호출 될 수 없습니다. 이 방법 에 대한 설명 을 보 니 "Ensure Singleton after serialization" 이 라 고 합 니 다. 무슨 뜻 인지 모 르 겠 습 니 다. 왜 이전에 본 적 이 없 습 니까? 이 문 제 는 우선 여기에 두 세 요.    두 가지 작은 수확 을 다 썼 습 니 다. 다음 편 에 서 는 ToString Builder 가 저 에 게 준 가장 큰 수확 인 abstract 와 디자인 모델 을 소개 할 것 입 니 다.

    좋은 웹페이지 즐겨찾기