2011-11-03 46 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圣
亚利桑那州凤凰城

相关问题