0

我得到了名为 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 这样的类是错误的吗?如果有人知道这样做的更好主意,我愿意接受一切。

4

2 回答 2

3

您看到的Object#toStringValues. 您需要toString在该类中覆盖以提供格式化输出

@Override
public String toString() {
    return "Values [name=" + name + ", type=" + type + ", value=" + value + "]";
}
于 2013-09-25T12:11:53.983 回答
1

你必须在你的类中覆盖该toString() 方法 。Values

根据 toString() 的文档

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

所以

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

你只是在课堂上 ovveride 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();
            }
}
于 2013-09-25T12:11:37.260 回答