commons-lang (builder 응용 프로그램)

5995 단어 jdk
인터넷에서 찾아보았지만 commons-lang에 대한 상세한 사용 방법을 발견하지 못했습니다. 최근에도 시간이 있어서 꼼꼼히 공부했습니다. 인터넷에 올려도 참고할 수 있습니다.
builder 패키지의 역할은 주로 프로그램원이 일치하는 equals(Object), toString(), hashCode(), compareTo(Object) 방법을 만드는 것을 돕기 위한 것이다.솔직히 이런 방법들이 완전히 프로그래머 스스로 실현된다면 확실히 좀 어렵고 세부적인 주의가 필요하지만 현실은builder 패키지를 통해 제공하는 도움을 통해 실현하기가 훨씬 쉽다.다음과 같은 클래스로 구성됩니다.
CompareToBuilder
EqualsBuilder
HashCodeBuilder
ReflectionToStringBuilder
StandardToStringStyle
ToStringBuilder
ToStringStyle
마지막 네 개는 모두 토스트링 () 과 관련이 있으며, 앞의 세 개는 이름을 통해 어떤 방법에 도움을 주는지 알 수 있다.다음은 하나하나 소개할 것이다.
먼저 CompareTo Builder의 사용법을 살펴보고 이 방법의 사용법을 이해하려면 먼저 compareTo가 무엇을 하는지 알아야 한다.compareTo(T o)는 Comparable 인터페이스의 한 방법으로 이 방법의 작용은 요소를 비교하는 것이다.단일한 방법으로만 본다면, 그것이 무슨 소용이 있는지 알 수 없다.그러나 다른 클래스와 결합하여 사용하면 상당히 강력한 기능을 제공할 수 있다. JDK 내부의 많은 클래스가 그것과 관련이 있는데 특히 집합 클래스와 그룹이 그것과 관련이 있다.하나의 클래스가Comparable 인터페이스를 실현하기만 하면, 그 실례는 내부의 정렬 관계가 존재한다.배열 내부의 객체가 Comparable 인터페이스를 구현하는 경우 해당 배열을 직접 정렬할 수 있습니다.
Arrays.sort(a);

자바 라이브러리의 모든 값이 있는 클래스는Comparable 인터페이스를 실현하는데 이것은 매우 중요하다.TreeSet과 같이, 이것은 순서를 유지하는 Set이지만, 내부의 요소는Comparable 인터페이스를 실현해야 한다.
Comparable가 무엇을 하는지 알게 되면 Comparable 인터페이스를 실현한 CompareTo 방법을 어떻게 작성해야 하는지 알아야 한다.구체적인 작성 규칙이 비교적 많고 상세한 과정은 effective Java 제2판을 참고할 수 있다. 위에서 비교적 상세하게 말했는데 이것이 바로 Compare To Builder가 등장할 때이다.
CompareToBuilder는 주로 두 가지 방법이 있습니다.
append(arg1,arg2): append 방법은 비교가 필요한 필드를 추가하고CompareToBuilder 대상을 되돌려주는 데 사용된다. 이것은 매우 중요하다. 이렇게 하면 연결하는 방식으로 방법을 사용할 수 있어 더욱 우아하고 치밀하게 보인다.
reflectionCompare(arg1,arg2): 반사적인 방식으로 필드를 비교한다. 이 방법의 장점은 한꺼번에 문제를 해결하는 것이다. append는 비교할 필드를 하나씩 추가해야 한다.그러나 반사가 일부 성능을 희생한다는 단점도 있다. 비록 새로운 버전의 JDK가 반사에 최적화를 했지만 말이다.사용법은 다음과 같습니다.
	public int compareTo(Object o) {
		   return CompareToBuilder.reflectionCompare(this, o);
	}

다음은 하나의 예를 통해 설명한다.
class Number implements Comparable<Number> {
	private int n1;
	private int n2;
	private String[] array;

	public Number(){
		
	}
	
	public Number(int n1, int n2,String[] array) {
		this.n1 = n1;
		this.n2 = n2;
		this.array = array;
	}

	public int getN1() {
		return n1;
	}

	public void setN1(int n1) {
		this.n1 = n1;
	}

	public int getN2() {
		return n2;
	}

	public void setN2(int n2) {
		this.n2 = n2;
	}
	
	public String[] getArray() {
		return array;
	}

	public void setArray(String[] array) {
		this.array = array;
	}
	

	public int compareTo(Number number) {
		return new CompareToBuilder()
				.append(this.n1, number.n1).append(this.n2, number.n2)
				.append(this.array, number.array)
				.toComparison();
	}
	
	public String toString(){
		return "n1="+n1+" n2="+n2+" array="+Arrays.toString(array)+"======";
	}

위의 클래스는Comparable 인터페이스를 실현하고compareTo 방법을 실현했다.이것은 compareTo 방법에서CompareTo Builder 클래스를 사용했는데 toComparison은 비교의 결과를 되돌려주고 음수는 작음을 나타내며 0은 작음을 나타내고 양수는 크음을 나타낸다.위의 짧은 몇 줄의 코드로 compareTo의 작성을 완성했는데 만약 프로그래머가 수동으로 실현한다면 훨씬 복잡할 것이다.
다음 코드를 사용하여 테스트합니다.
	@Test
	public void appendTest() {

		String[] s1 = {"asd","fsd"};
		String[] s2 = {"asd","fsd"};
		String[] s3 = {"asd","asd"};
		Number[] n = {new Number(2,4,s1),
				new Number(4,6,s2),new Number(2,3,s3)
				,new Number(4,5,s2),new Number(4,5,s3)
		};
		System.out.println(Arrays.toString(n));
		Arrays.sort(n);
		System.out.println(Arrays.toString(n));
		
	}

기본적인 정렬 방식은 낮은 것에서 높은 것, 큰 것에서 작은 것까지 출력 결과를 비교하여 정렬을 실현할 수 있다.그러나 위의 토스트링(toString)의 실현은 우아하지 않다.대부분의 경우 우리는 자신의 토스트링(tostring)을 실현하고 모든 대상이 통일된 형식의 토스트링(tostring)을 가지도록 해야 한다. 이렇게 하면 읽기와 해석이 더욱 쉽다.toString () 방법을 작성하는 데는 특별한 제한이 없지만, 기본적으로 주목할 만한 모든 정보를 되돌려야 한다.위의 방법에서는 ToStringBuilder를 사용하여 작업을 수행하면 보다 우아합니다.
	public String toString(){
		return new ToStringBuilder(this,ToStringStyle.SHORT_PREFIX_STYLE).
	       append("n1", n1).
	       append("n2", n2).
	       append("array", array).
	       toString();
	}

출력:
[Number[n1=2,n2=4,array={asd,fsd}]..................
여기서 ToStringStyle은 출력 표시 형식을 지정합니다. 개인적으로 ToStringStyle이 미리 정의한 필드가 충분하다고 느끼며 모든 미리 정의된 형식이 마음에 들지 않으면 수동으로 스타일을 설정할 수도 있습니다.Tostring Style은 추상적인 유형일 뿐이기 때문에 이런 것을 계승하여 자신의 스타일을 실현할 수 있다.물론 builder 패키지도 이 인터페이스를 실현한 표준 스타일 클래스인 Standard ToString Style을 제공합니다.사실 Standard Tostring Style 자체는 아무것도 하지 않았고 Tostring Style이 제공하는 방법을 사용했다. 단지 일부 Tostring Style을 보호할 수 있는 방법을 퍼블릭으로 공개했을 뿐이다.StandardToStringStyle의 사용 방법도 간단합니다.
		System.out.println(standard.getArrayEnd());
		standard.setArrayEnd("]");
		System.out.println(standard.getArrayEnd());

get을 통해 시스템의 미리 정의된 속성을 보고 set을 통해 미리 정의된 속성을 수정합니다.
ToStringBuilder는 다음과 같이 다른 클래스와 유사한 reflectionToString도 제공합니다.

		public String toString() {
		   return ToStringBuilder.reflectionToString(this);
		 }

Reflection Tostring Builder는 사실 Tostring Builder의reflection Tostring에 구체적인 실현을 제공하는 것이다. Tostring Builder에는 다음과 같은 코드가 있다.
	public static String reflectionToString(Object object) {
        return ReflectionToStringBuilder.toString(object);
    }

나머지 EqualBuilder와HashCodeBuilder의 사용법은ComparableToBuilder의 사용법과 완전히 비슷하다.
결론: 새로운 버전의 JDK에서 commons-lang 구성 요소를 실현하거나 대체하는 일부 라이브러리가 있지만 일부 JDK가 대체할 수 없는 라이브러리가 있다. 개인적으로 이것은 전체의commons-lang 패키지에서 가장 유용한 몇 개의 하위 패키지 중 하나이고 사용할 수 있는 장소도 상당히 광범위하다. 대부분의 경우 사용된다고 할 수 있기 때문에 모든 사람들이 이러한 기초의 라이브러리를 잘 파악해야 한다.

좋은 웹페이지 즐겨찾기