如何为自定义类创建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 extends Object> ) { // 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那圣
亚利桑那凤凰城