2011-11-03 3 views
6

필자는 원한다면 몇가지 '컨테이너'클래스를 만들어야하는 프로젝트에서 Java로 작업 중이다.커스텀 클래스를위한 println/print 메소드를 생성하는 방법

:

public class Pair{ 

    Object KEY; 
    Object VALUE; 

    public Pair(Object k, Object v) 
    { 
     KEY = k; 
     VALUE = v; 
    } 

    public Object getKey() 
    { return KEY; } 
    public Object getValue() 
    { return VALUE; } 
} 

(. 이것이 내가 최종 버전의 메소드를 얻을/적절한 설정을 사용하고 심각하게 단순화하고, 유의하시기 바랍니다)

내 질문은 이것이다 : 여기에 하나의 간단한 버전입니다 예를 들어, 매개 변수로 ArrayList에와 println 메소드 메소드를 호출 할 때

는 :

ArrayList<String> arr = new ArrayList<String>(); 
arr.add("one"); 
arr.add("two"); 
System.out.println(arr); 

자바는 자동으로 올바르게 ArrayList의 각 '노드'또는 요소를 인쇄하는 방법을 알고있다.

println 메서드가 내 Pair 클래스를 올바르게 인쇄 할 수있게하는 메서드를 작성하는 방법이 있습니까?

답변

12

당신은 toString 방법을 무시하고 당신이 원하는의 문자열 표현을 반환해야합니다. 그래서 예를 들면

: 당신이 다음을 수행 할 수있는 것보다

public class Pair { 

    Object key; 
    Object value; 

    public Pair(Object k, Object v) 
    { 
     key = k; 
     value = v; 
    } 

    public Object getKey() { 
     return key; 
    } 

    public Object getValue() { 
     return value; 
    } 

    public String toString() { 
     return "Key: " + getKey() + ", Value: " + getValue(); 
    } 
} 

:

List<Pair> pairs = new ArrayList<Pair>(); 
pairs.Add(new Pair("pair1key", "pair1value")); 
pairs.Add(new Pair("pair2key", "pair2value")); 

for (Pair p : pairs) { 
    System.out.println(p); 
} 
+0

완벽합니다. 감사! – Proxy404

4

당신은 toString()를 재정의해야합니다

public class Pair 
{ 
    KeyObject key; 
    ValueObject value; 

    public Pair(KeyObject k, ValueObject v) 
    { 
     key = k; 
     vale = v; 
    } 

    // ... 

    @Override 
    public String toString() 
    { 
     return "Key: " + key.getKey() + " - Vlaue: " value.getValue(); 
    } 
} 
+1

'공공 문자열 toString 말을해야() ' – jxmorris12

1

당신은 toString() 방법을 정의해야합니다. System.out.println(Object o)에 의해 자동으로 호출됩니다. ArrayList 클래스는 오버라이드 된 toString() 메서드를 사용하여 멋지게 형식화 된 표현을 제공합니다.

기본적으로 사용자가 정의한대로 Object.toString을 덮어 쓰는 것만으로도 충분합니다.

1

사용자 정의 클래스의 toString() 메소드를 대체하고 원하는 정보를 인쇄 할 수 있습니다.

@Override 
public String toString() { 

    return .....; 
    } 
1

당신은 ArrayList을 확장하고 toString() 방법을 무시할 수 :

public class MyArrayList<T> extends ArrayList<T> { 
    @Override 
    public String toString() { 
     // format your print here... 
    } 
} 

을하지만이 과잉이다. 나는 인쇄 유틸리티 방법을 쓰려고한다.

public class MyUtils { 
    public String toString(ArrayList<? extends Object>) { 
     // format your print here; 
    } 
} 
0
/** demo print of an ArrayList of Address objects using overridden toString() method */ 

import java.util.ArrayList; 

public class Address { 

    // simple address fields (incomplete) 
    private String addrLine1; 
    private String city; 
    private String state; 

    // run sample program 
    public static void main(String[] args) { new Address().run(); } 

    public void run() { 
     // instantiate example Address records 
     Address addr1 = new Address(); 
     Address addr2 = new Address(); 

     // add example field data 
     addr1.addrLine1 = "123 This St."; 
     addr1.city = "Big Tuna"; 
     addr1.state = "Texas"; 
     addr2.addrLine1 = "456 That St."; 
     addr2.city = "Phoenix"; 
     addr2.state = "Arizona"; 

     // create ArrayList<Address>, add instances 
     ArrayList<Address> addrArray = new ArrayList<>(); 
     addrArray.add(addr1); 
     addrArray.add(addr2); 

     // print Address instance fields in addrArray 
     for (Address addr : addrArray) 
      System.out.println(addr); 
    } // end run() 

    // overriding toString() method 
    @Override public String toString() 
     return "\n" + addrLine1 + "\n" + city + ", " + state; 

} // end class Address 

인쇄 :

(123)이 세인트
큰 참치, 텍사스

456 그 세인트
피닉스, 애리조나

관련 문제