Преобразование обратно из toString в Object - PullRequest
4 голосов
/ 08 апреля 2010

Есть ли способ преобразовать toString обратно в объект в Java?

Например:

Map<String, String> myMap = new HashMap<String, String>();
myMap.put("value1", "test1");
myMap.put("value2", "test2");
String str = myMap.toString();

Есть ли способ преобразовать эту строку обратно в карту?

Ответы [ 7 ]

7 голосов
/ 08 апреля 2010

Краткий ответ: нет.

Немного более длинный ответ: не использовать toString. Если рассматриваемый объект поддерживает сериализацию, то вы можете перейти от сериализованной строки обратно к объекту в памяти, но это целый «другой шарик воска». Узнайте о сериализации и десериализации, чтобы узнать, как это сделать.

1 голос
/ 08 апреля 2010

Нет, нет.

toString () предназначен только для ведения журнала и отладки. Он не предназначен для сериализации статистики объекта.

0 голосов
/ 08 апреля 2010
public class CustomMap<K, V> extends HashMap<K, V>{
    public String toString(){
        //logic for your custom toString() implementation.
    }
}

Есть класс, который расширяет HashMap и переопределяет метод toString ().Тогда вы можете сделать следующее и достичь того, что вы хотите,

    CustomMap<String, String> myMap = new CustomMap<String, String>();
    myMap.put("value1", "test1");
    myMap.put("value2", "test2");
    String str = myMap.toString();
0 голосов
/ 08 апреля 2010

Рассматривали ли вы написание собственной версии для утилит преобразования?

String mapToString(HashMap<String,String> map)
HashMap<String,String> stringToMap(String mapString)
0 голосов
/ 08 апреля 2010

невозможно, если вы думаете, что можете «привести» строку;попробуйте разбор;что-то вроде:

public static Map<String,String> parseMap(String text) {
    Map<String,String> map = new LinkedHashMap<String,String>();
    for(String keyValue: text.split(", ")) {
        String[] parts = keyValue.split("=", 2);
        map.put(parts[0], parts[1]);
    }
    return map;
}
0 голосов
/ 08 апреля 2010

Строка также является объектом. И нет, невозможно получить исходный объект из его строкового представления (через toString()). Вы можете просто получить это, подумав о том, сколько информации хранится (или может храниться) внутри объекта, но насколько коротко строковое представление.

0 голосов
/ 08 апреля 2010

Неа. Помимо анализа этой строки, возвращаемой myMap.toString(), и помещения проанализированных значений обратно в карту. Что не кажется здесь сложным, поскольку в вашем Map есть только String s, поэтому вывод myMap.toString() должен быть вполне читабельным / разбираемым.

Но в целом это не очень хорошая идея. Зачем тебе это делать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...