【问题标题】:Converting back from toString to Object从 toString 转换回 Object
【发布时间】:2010-04-07 21:59:45
【问题描述】:

有什么方法可以将 toString 转换回 Java 中的对象?

例如:

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

有什么办法可以将这个字符串转换回地图?

【问题讨论】:

    标签: java


    【解决方案1】:

    简短回答:不。

    略长一点的答案:不使用toString。如果有问题的对象支持序列化,那么您可以从序列化的字符串返回到内存中的对象,但这完全是“另一个蜡球”。了解序列化和反序列化以了解如何执行此操作。

    【讨论】:

    【解决方案2】:

    没有。

    toString() 仅用于记录和调试目的。它不适用于序列化对象的统计信息。

    【讨论】:

    • +1 - 键是toString() 方法的指定用途
    【解决方案3】:

    不。除了解析 myMap.toString() 返回的字符串并将解析后的值放回地图之外。这似乎并不复杂,因为您的Map 中只有Strings,所以myMap.toString() 的输出应该是非常可读/可解析的。

    但总的来说,这不是一个好主意。你为什么要这样做?

    【讨论】:

      【解决方案4】:

      字符串也是一个对象。不,不可能从其字符串表示中获取原始对象(通过toString())。您可以通过考虑在一个对象中存储(或可以)多少信息以及字符串表示形式有多短来简单地了解这一点。

      【讨论】:

        【解决方案5】:

        如果您认为可以“转换”字符串,则不可能; 尝试解析;类似:

        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;
        }
        

        【讨论】:

          【解决方案6】:

          您是否考虑编写自己的版本来转换实用程序?

          String mapToString(HashMap<String,String> map)
          HashMap<String,String> stringToMap(String mapString)
          

          【讨论】:

            【解决方案7】:
            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();
            

            【讨论】:

              猜你喜欢
              • 2020-08-18
              • 1970-01-01
              • 2020-11-05
              • 1970-01-01
              • 1970-01-01
              • 2015-11-17
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多