2013-06-21 3 views
1

У меня есть экземпляр ListMultimap (Guava), который состоит из вложенных HashMaps и довольно сложных объектов - есть ли способ изменить toString() для этого экземпляра, чтобы настроить вывод консоли при печати HashMap? Или это единственный способ сделать новый класс, который является расширением класса HashMap, и переписать метод ToString() следующим образом:Переопределение toString() для одного конкретного экземпляра Multimap?

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

Multimaps инстанцируются следующим образом:

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

так Я не думаю, что первый ответ применим? (Спасибо, хотя.)

+0

Что настройки вы пытаетесь сделать, что вы не можете сделать на 'toString' типов элементов, вместо типа коллекции? –

+0

Хммм, значения ListMultimap являются самими списками; Я хочу уметь хватать длину этих значений. –

+0

Ждите, уточните: у вас есть 'ListMultimap ', или' ListMultimap > '? Если первое, то просто 'multimap.keys(). ToString()', вероятно, сделает то, что вам нужно. –

ответ

1

У меня создается впечатление, что у вас есть 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(); 
4

Как насчет анонимного класса:

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

EDIT: Похоже, что вы хотите сделать это с final класса. Я бы вместо того, чтобы предложить написание отдельного static toString метода и вызова, что вместо этого, вместо того, чтобы каким-то образом пытается добавить его к самому классу:

public static String mapToString(Map<X, Y> map) { 
    // toString implementation here 
} 
+0

О, подождите, спасибо за ответ, но я понял, что тип моей Карты на самом деле является Multimap, из библиотеки Guava. Редактирование OP прямо сейчас, прошу прощения! –

+0

@RyanYu Вы должны иметь возможность применить ту же идею. – arshajii

+0

@arshajii: Нет, не стоит; реализация 'Multimap' -' final'. –

0

Вы должны переопределить метод ToString() в пользовательском классе «customizedHashMap». Вы не можете настроить метод toString() только для одного экземпляра вашего класса.

Я предлагаю вам использовать имена классов с заглавной буквой!