java - 得到奇怪的输出,如 "Values@7d5b6e"而不是某些特定的字符串

标签 java xml object guava

我得到了名为 Values 的对象,它看起来像这样:

class Values{
    private String name;
    private String type;
    private String value;

public Values(String name, String type, String value)
    {this.name = name; this.type = type; this.value = value;}
public String getName()
    {return name;}
public String getType()
    {return type;}
public String getValue()
   {return value;}
  }

我的数据模型看起来像这样。我的输入是一个 XML 文件。一个包包含一些类,每个类都有带有名称、类型和值的属性。上面的 Values 类应该代表一个属性。

我使用 Multimaps 来保存此信息。例如,所需的输出是这样的。

[PackageName:[ObjectName1, Values1],
             [ObjectName1, Values2],
             [ObjectName2, Values1]]

我处理输入 XML 文件的代码是这样的。 For 循环将迭代输入文件的数据结构。

        SAXBuilder builder = new SAXBuilder();
        org.jdom2.Document doc = builder.build(input);
        Element rootNode = doc.getRootElement();
        List<Element> listPackages = rootNode.getChildren();


        for(Element packages : listPackages)
        {   
                List<Element> objectInstanceList = packages.getChildren();

                for(Element objects : objectInstanceList) 
                {
                    Map<String, Multimap<String,Values>> valuesMap = new HashMap<String, Multimap<String, Values>>();

                    List<Element> listObjectClasses = objects.getChildren();
                    bdbID = objects.getName();
                    if (objects.getAttributes().size() == 0)
                    {   
                    for(Element classes : listObjectClasses) 
                      {     
                    List<Element> listObjectAttributes = classes.getChildren();

                        for(Element objectAttributes : listObjectAttributes)
                        {

                            Multimap<String, Values> mm = HashMultimap.create();
                            String name = objectAttributes.getAttributeValue("name");
                            String type = objectAttributes.getAttributeValue("type");
                            String value = objectAttributes.getAttributeValue("value"); 
                            Values v = new Values(name, type, value);                   
                            mm.put(classes.getName(), v);
                                         System.out.println(name +":" + type + ":" + value);
                            System.out.println(v);
                        }
                        valuesMap.put(bdbID, mm);
                     }
                   }
             }
     }

最后的 2 个打印用于测试目的,这是我的问题。重新调整两个打印的输出。

输出 1:

Bandwidth:KiloBitPerSecond:50   //Name:Type:Value

输出2:

Dataprocessing.Values@7d5b6e   // Dataprocessing = Java-Package which contains the class.

问题是,为什么我会得到这个奇怪的输出?为此目的使用像 Values 这样的类是错误的吗?如果有人知道更好的想法来做到这一点,我愿意接受一切。

最佳答案

您看到的是Object#toString 的表示。您需要重写该类中的 toString 以提供格式化输出

@Override
public String toString() {
    return "Values [name=" + name + ", type=" + type + ", value=" + value + "]";
}

关于java - 得到奇怪的输出,如 "Values@7d5b6e"而不是某些特定的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19004541/

相关文章:

android - 如何从 res/integers.xml 获取整数值?

javascript - 如果属性与另一个数组匹配,则检索数组中的对象

javascript - 如何访问javascript中的特定对象?

java - Amazon Web Services S3 中的线程安全文件重命名

java - 用 Java 读取 VB 5.0 二进制文件

python - 在 Python 中,尝试使用第二个 RESX 的内容更新 RESX

xml - xslt映射

c# - 使接口(interface)方法返回实现它的类的类型的对象

java - java中的固定格式数字。 (如何剪号?)

java - 在文本javafx中显示变量值