在Java中是否可以覆盖Objects数组的“toString”?

2022-09-02 20:04:13

在 Java 中,是否可以覆盖对象数组的 toString?

例如,假设我创建了一个简单的类(哪个类并不重要,因为这是一个一般问题)。一旦客户端创建了一个数组并且客户端使用 ,它是否有可能不打印数组的地址,而是打印自定义的地址?UserUser[]System.out.print(array)toString()

PS:当然,我不能在我的类中重写,因为它与单个实例有关。toString()


答案 1

哈哈当然,你可以创建一个静态方法 User.toString( User[] ),但它不会被隐式调用。


答案 2

您可以使用 它将在数组中的每个对象上调用该方法。Arrays.toString(Object[] a);toString()

编辑(来自评论):

我理解你想要实现的目标,但Java目前不支持这一点。

在 Java 中,数组是动态创建的对象,可以分配给 Object 类型的变量。可以在数组上调用类 Object 的所有方法。参见 JLS Ch10

当您在对象上调用时,它会返回一个“文本表示”该对象的字符串。因为数组是 Object 的一个实例,所以您只能获得类的名称、@ 和十六进制值。请参阅对象#toStringtoString()

Arrays.toString() 方法将数组的等效值返回为列表,该列表将循环访问并调用列表中的每个对象。toString()

因此,虽然你无法做到,但你可以做到,这基本上可以实现同样的事情。System.out.println(userList);System.out.println(Arrays.toString(userList);