Java:print_r?
上次我问如何在此处填充数据结构。现在,我想知道在Java中是否有某些东西,例如我在PHP中使用的print_r,可以表示我在Maps和列表中填充的内容,而无需执行自己的算法。
有任何想法吗?
解决方案
在集合上调用toString应该返回一个字符串,其中包含所有元素的字符串表示形式。
但是,这不适用于内置数组,因为它们没有toString覆盖,只会为我们提供一个内存地址。
我不知道java中的print_r等效项。
但...
每个对象都有toString()方法的默认实现,如果我们为它们调用toString(),则列表和地图实现会打印其内容。
如果我们需要打印出任何调试信息,则toString()可能是我们要找的地方。
我们可以尝试使用旧的Apache Commons Lang的ToStringBuilder。
在Java中没有print_r的等效项。
但是对于地图或者列表,我们可以使用如下所示的foreach循环:
List <String> list = …; // fills your list // print each list element for (String s : list) { System.out.println(s); }
对于数组,最简单的方法是Arrays.asList(array).toString()。
我通常在调试输出中希望在对象上实现的对象上实现toString()。对于生成的对象(JAXB等),尽管可能需要制作一个实用程序类以进行打印。
其他人提到了toString()
方法。这仅在对象实现toString()
时才有用。如果未正确实施,则会得到类似以下内容的内容:java.lang.Object @ 1b9240e
。
即使有点乏味,在我们自己的类中实现toString()
仍然很容易,但是第三方类并不总是实现它。使用调试器会更好。像print_r这样的东西在PHP中甚至存在的唯一原因是因为缺少真正的调试器。我认为我们会发现,能够设置断点而不使用一堆诊断打印语句将导致工作流程更快,代码更简洁。
根据我们要执行的操作,解决方案可能非常简单。以下代码不会产生print_r提供的格式化输出,但是它将允许我们输出列表,数组和映射的结构:
// Output a list final List<String> list = new ArrayList<String>(); list.add("one"); list.add("two"); list.add("three"); list.add("four"); System.out.println(list); // Output an array final String[] array = {"four", "three", "two", "one"}; System.out.println(Arrays.asList(array)); // Output a map final Map<String, String> map = new HashMap<String, String>(); map.put("one", "value"); map.put("two", "value"); map.put("three", "value"); System.out.println(map.entrySet());
对于其他类型的对象,我们可以使用反射来创建用于此目的的实用程序。