1

我有一个 ListMultimap (Guava) 的实例,它由嵌套的 HashMap 和相当复杂的对象组成——当我打印 HashMap 时,有什么方法可以更改此实例的 toString() 以自定义控制台输出?或者是创建一个新类的唯一方法,它是 HashMap 类的扩展,并重写 toString() 方法如下:

class CustomizedListMultiMap extends ListMultiMap<myComplexDatatypeOne, myComplexDatatypeTwo> {
    // overwriting toString
    public String toString() {
        // my custom implementation
    }
}

多图实例化如下:

ListMultimap<datatypeOne, datatypeTwo> map = ArrayListMultimap.create();

所以我认为第一个答案不适用?(不过谢谢。)

4

3 回答 3

4

匿名类怎么样:

Map<X, Y> map = new HashMap<X, Y>() {
    @Override
    public String toString() {
        // toString implementation here
    }
};

编辑:看起来你想用一final堂课来做这件事。相反,我建议编写一个单独的static toString方法并调用它,而不是以某种方式尝试将其添加到类本身:

public static String mapToString(Map<X, Y> map) {
    // toString implementation here
} 
于 2013-06-21T17:50:57.227 回答
1

我的印象是你有一个,并且你想以一种看起来与 s的长度相对应ListMultimap<Foo, List<Bar>>的格式打印出来。{a=[1, 2, 3]}List<Bar>

最简单的方法可能是

Multimaps.transformValues(multimap, new Function<List<Bar>, Integer>() {
   public Integer apply(List<Bar> list) {
     return list.size();
   }
}).toString();
于 2013-06-21T18:11:42.293 回答
0

您必须覆盖自定义类“customizedHashMap”中的 toString() 方法。您不能只为您的类的一个实例自定义 toString() 方法。

我建议你使用首字母大写的类名!

于 2013-06-21T17:57:01.613 回答