如何为自定义类创建println / print方法

我正在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 arr = new ArrayList(); arr.add("one"); arr.add("two"); System.out.println(arr); 

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

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

您将需要覆盖toString方法并返回所需内容的字符串表示forms。

例如:

 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 pairs = new ArrayList(); pairs.Add(new Pair("pair1key", "pair1value")); pairs.Add(new Pair("pair2key", "pair2value")); for (Pair p : pairs) { System.out.println(p); } 

你需要覆盖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(); } } 

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

 @Override public String toString() { return .....; } 

您可以扩展ArrayList并覆盖toString()方法:

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

但这太过分了。 我只想写一个打印实用程序方法。

 public class MyUtils { public String toString( ArrayList ) { // format your print here; } } 

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

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

 /** 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
, add instances ArrayList
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那圣
亚利桑那凤凰城