JavaRush /Java Blog /Random-KO /ToStringBuilder를 사용하여 ToString() 메서드를 효과적으로 재정의하는 방법.
dio
레벨 16
Москва

ToStringBuilder를 사용하여 ToString() 메서드를 효과적으로 재정의하는 방법.

Random-KO 그룹에 게시되었습니다
ToStringBuilder 는 Apache Commons lang 라이브러리 에서 제공하는 도우미 클래스입니다 . ToStringBuilder는 Apache Commons Lang 라이브러리에서 제공하는 유틸리티 클래스입니다. 이는 toString() 메서드에서 출력해야 하는 객체 데이터와 양, 형식에 대한 완전하고 더 나은 제어를 제공합니다. ToStringBuilder를 사용하면 하위 클래스에서 ToString() 메서드를 재정의할 필요가 없으므로 많은 코드를 작성하지 않아도 됩니다. ToStringBuilder를 사용하면 제공되는 기능을 최대한 활용할 수 있는 일종의 템플릿을 만들 수 있습니다. 프로젝트에 Commons-Lang을 포함하려면 Maven 구성 파일에 다음 종속성을 추가하세요. 이 기사에서는 다음 애플리케이션의 클래스에서 ToString() 메서드를 재정의하기 위한 모범 사례 로 간주될 수 있는 몇 가지 샘플 사용 예제를 제공합니다 . 다양한 시나리오에서 ToStringBuilder를 사용하여 toString() 메서드를 빌드하는 다양한 가능성을 보여주기 위해 AbstractUser.java, WebUser.java 및 GuestUser.java라는 세 가지 모델을 만듭니다. commons-lang commons-lang 2.5
AbstractUser.java
package com.howtodoinjava.model; import java.io.Serializable; import org.apache.commons.lang.builder.ToStringBuilder; import com.howtodoinjava.style.CustomToStringStyle; public abstract class AbstractUser implements Serializable { private static final long serialVersionUID = 1L; private int id; private String firstName; private String lastName; private String age; //Setterss and getters }
웹사용자.java
public class WebUser extends AbstractUser { private static final long serialVersionUID = 1L; private Date lastLoggedIn; public Date getLastLoggedIn() { return lastLoggedIn; } public void setLastLoggedIn(Date lastLoggedIn) { this.lastLoggedIn = lastLoggedIn; } }
GuestUser.java
public class GuestUser extends WebUser { private static final long serialVersionUID = 1L; private String location; public String getLocation() { return location; } public void setLocation(String location) { this.location = location; } }
다양한 사용 사례
1) 슈퍼 클래스의 toString() 메소드는 모든 하위 클래스에서 사용됩니다.
최상위 개체 클래스에서 toString() 메서드를 재정의할 수 있습니다. 우리의 경우 AbstractUser.java입니다. 이 메서드는 자체 버전의 toString() 메서드를 포함하지 않는 한 모든 하위 클래스에서 사용됩니다. @Override public String toString() { return ToStringBuilder.reflectionToString(this); } 위의 ToString() 메서드는 현재 클래스에 대해 사용 가능한 모든 정보를 제공할 수 있으며, 하위 클래스가 ToString() 메서드를 재정의하지 않는 한 하위 클래스에서도 작동합니다. package com.howtodoinjava; import java.util.Date; import com.howtodoinjava.model.GuestUser; import com.howtodoinjava.model.WebUser; public class ToStringDemoUsage { public static void main(String[] args) { GuestUser guest = getGuestUser(); System.out.println(guest); } public static GuestUser getGuestUser() { GuestUser user = new GuestUser(); user.setId(100); user.setFirstName("Lokesh"); user.setLastName("Gupta"); user.setAge("30"); user.setLastLoggedIn(new Date()); user.setLocation("New Delhi"); return user; } } Output: com.howtodoinjava.model.GuestUser@d1f24bb[location=New Delhi,lastLoggedIn=Mon Jun 03 13:31:05 IST 2013,id=100,firstName=Lokesh,lastName=Gupta,age=30]
2) 데이터와 같은 모든 유형의 사용자 정의 형식
ToString 메서드의 모든 필드에 사용자 지정 형식을 적용할 수 있습니다. 사용자 정의 형식화의 예는 다음과 같습니다. package com.howtodoinjava.style; import java.text.SimpleDateFormat; import java.util.Date; import org.apache.commons.lang.builder.ToStringStyle; public class CustomToStringStyle extends ToStringStyle { private static final long serialVersionUID = 1L; protected void appendDetail(StringBuffer buffer, String fieldName, Object value) { if (value instanceof Date) { value = new SimpleDateFormat("yyyy-MM-dd").format(value); } buffer.append(value); } } 형식화를 사용하려면 다음과 같은 방법으로 배치하십시오. @Override public String toString() { return ToStringBuilder.reflectionToString(this, new CustomToStringStyle()); } Output: com.howtodoinjava.model.GuestUser@7910769b[location=New Delhi,lastLoggedIn=2013-06-03,id=100,firstName=Lokesh,lastName=Gupta,age=30]
3) 쉬운 메소드 호출로 슈퍼 클래스의 정보를 하위 클래스에 사용
하위 클래스에서 ToString()을 재정의하여 슈퍼 클래스에서 받은 정보에 무언가를 추가하려면 다음과 같이 하십시오. public class WebUser extends AbstractUser { //Other code @Override public String toString() { return new ToStringBuilder(this) .appendSuper(super.toString()) .append("lastLoggedIn", lastLoggedIn).toString(); } } Output: com.howtodoinjava.model.GuestUser@22aed3a5[location=New Delhi,lastLoggedIn=2013-06-03,id=100,firstName=Lokesh,lastName=Gupta,age=30,CustomMessage=I have been added additionally]
4) 상속 계층의 특정 수준까지만 정보를 사용합니다.
일부 하위 클래스에서 모든 슈퍼 클래스의 필드를 확장해야 한다고 가정하면 다음과 같은 방법으로 상속 계층의 특정 수준까지 정보를 포함할 수 있습니다. public class GuestUser extends WebUser { @Override public String toString() { return ToStringBuilder.reflectionToString(this,new CustomToStringStyle(),true,WebUser.class); } } Output: com.howtodoinjava.model.GuestUser@18dd7404[location=New Delhi,lastLoggedIn=2013-06-03]
5) 원하는 정보만 표시
ToString() 메서드에 클래스의 모든 필드를 포함하고 싶지 않은 경우도 있습니다. 그런 다음 다음과 같이 할 수 있습니다. public abstract class AbstractUser implements Serializable { //Other code @Override public String toString() { return new ToStringBuilder(this) .append("firstName", firstName) .append("lastName", lastName) .append("age", age).toString(); } } public class GuestUser extends WebUser { //Other code @Override public String toString() { return new ToStringBuilder(this) .appendSuper(super.toString()) .append("location", location).toString(); } } Output: com.howtodoinjava.model.GuestUser@6483dae1[firstName=Lokesh,lastName=Gupta,age=30,location=New Delhi] 이 링크에서 위 예제의 소스 코드를 다운로드할 수 있습니다. 소스 원본 다운로드 : ToStringBuilder를 사용하여 toString()을 효과적으로 재정의하는 방법 번역됨
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION