得到奇怪的输出像“值@ 7d5b6e”而不是某些特定的字符串

时间:2013-09-25 12:10:19

标签: 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;}
  }

我的Datamodel看起来像这样。 MY Input是一个XML文件。包中包含一些类,每个类都有一个名称,类型和值的属性。上面的类值应该代表一个属性。

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

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

我处理输入XML-File的代码是这样的。 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);
                     }
                   }
             }
     }

最后的两个印刷品是用于测试目的,这是我的问题。退回两个版画的输出。

输出1:

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

输出2:

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

问题是,为什么我会得到这个奇怪的输出?为此目的使用像Values这样的类是错误的吗?如果有人知道更好的想法,我会对所有事情持开放态度。

2 个答案:

答案 0 :(得分:3)

您看到Values的{​​{3}}代表。您需要覆盖该类中的toString以提供格式化输出

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

答案 1 :(得分:1)

您必须在toString()课程中使用Values方法。

根据toString()的文档

  

返回对象的字符串表示形式。通常,toString方法返回一个“文本表示”此对象的字符串。

所以

Dataprocessing.Values@7d5b6e是Values类的文本表示。

您只需在toString课程中使用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;
    }

    @Override
            public String toString() {
                 StringBuilder result = new StringBuilder();
                 result.append(this.name ).append(",");  
                 result.append(this.type ).append(",");
                 result.append(this.value )
                 return result.toString();
            }
}