我得到了名为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这样的类是错误的吗?如果有人知道更好的想法,我会对所有事情持开放态度。
答案 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();
}
}