2011-11-03 29 views
6

Tôi đang làm việc trong Java trên một dự án yêu cầu tôi tạo một vài lớp 'container', nếu bạn muốn. Dưới đây là một phiên bản đơn giản của một:Cách tạo phương thức println/print cho lớp tùy chỉnh

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; } 
} 

(. Xin lưu ý, đây là đơn giản hóa nghiêm trọng và tôi đang sử dụng bộ thích hợp/có được phương pháp trong phiên bản cuối cùng)

Câu hỏi của tôi là thế này:

Khi gọi phương thức println với một ArrayList như tham số, ví dụ:

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

Java tự động biết làm thế nào để in từng 'nút' hoặc thành phần của ArrayList một cách chính xác.

Có cách nào để viết phương pháp để cho phép phương thức println in chính xác lớp Pair của tôi không?

Trả lời

12

Bạn sẽ cần phải ghi đè lên các phương pháp toString và trả về một chuỗi đại diện của những gì bạn muốn.

Vì vậy, ví dụ:

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(); 
    } 
} 

hơn bạn có thể làm như sau:

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

Hoàn hảo. Cảm ơn! – Proxy404

4

Bạn cần phải ghi đè 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

nên nói 'public String toString() ' – jxmorris12

1

Bạn sẽ phải xác định một phương pháp toString(). Nó được gọi tự động bởi System.out.println(Object o). Lớp ArrayList có phương thức toString() bị ghi đè cung cấp một biểu diễn được định dạng độc đáo.

Về cơ bản, ghi đè Object.toString với định nghĩa của riêng bạn là tất cả những gì bắt buộc.

1

Bạn có thể ghi đè phương thức toString() của lớp tùy chỉnh và in bất kỳ thông tin nào bạn muốn.

@Override 
public String toString() { 

    return .....; 
    } 
1

Bạn có thể mở rộng ArrayList và ghi đè lên toString() phương pháp:

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

Nhưng điều này là quá mức cần thiết. Tôi sẽ viết một phương thức tiện ích in.

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 

Prints:

123 này St.
Big cá ngừ, Texas

456 Đó St.
Phoenix, Arizona

Các vấn đề liên quan