12

如果您愿意,我正在使用 Java 开发一个需要我制作一些“容器”类的项目。这是一个的简单版本:

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

(请注意,这被严重简化了,我在最终版本中使用了正确的 set/get 方法。)

我的问题是这样的:

以 ArrayList 作为参数调用 println 方法时,例如:

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

Java 自动知道如何正确打印 ArrayList 的每个“节点”或元素。

有没有办法编写一个方法来允许 println 方法正确打印我的 Pair 类?

4

6 回答 6

20

您将需要覆盖该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);
}
于 2011-11-03T20:51:17.500 回答
5

您需要覆盖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() + " - Value: " + value.getValue();
    }
}
于 2011-11-03T20:50:39.127 回答
2

您可以覆盖toString()自定义类的方法并打印您想要的任何信息。

@Override 
public String toString() {

    return .....;
  }
于 2011-11-03T20:53:49.983 回答
1

你必须定义一个toString()方法。它由 自动调用System.out.println(Object o)。该类ArrayList具有这样一个重写的toString()方法,它提供了格式良好的表示。

基本上,只需要使用您自己的定义覆盖Object.toString 即可。

于 2011-11-03T20:52:31.833 回答
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;
    }
}
于 2011-11-03T20:56:02.353 回答
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 This St.
Big Tuna, 德克萨斯州

456 那个圣
凤凰城,亚利桑那州

于 2015-04-27T14:58:10.383 回答