我得到了我的被称为值的对象,它看起来如下:
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看起来是这样的。我的输入是一个XML文件。包包含一些类,每个类都有一个名称、类型和值的属性。上面的类值应该表示一个属性。
我使用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);
}
}
}
}最后的两个打印是为了测试目的,这是我的问题。恢复两个打印的输出。
产出1:
Bandwidth:KiloBitPerSecond:50 //Name:Type:Value产出2:
Dataprocessing.Values@7d5b6e // Dataprocessing = Java-Package which contains the class.问题是,为什么我要得到这个奇怪的输出?为此目的使用类似值的类是错误的吗?如果有人知道更好的办法来做这件事,我对一切都敞开心扉。
发布于 2013-09-25 12:11:53
您正在看到Object#toString表示的Values。您需要重写该类中的toString以提供格式化输出。
@Override
public String toString() {
return "Values [name=" + name + ", type=" + type + ", value=" + value + "]";
}发布于 2013-09-25 12:11:37
您必须在您的toString()类中使用Values方法。
根据toString()的文档
返回对象的字符串表示形式。通常,toString方法返回“文本表示”此对象的字符串。
所以
Dataprocessing.Values@7d5b6e是值类的文本表示形式。
您只需要在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();
}
}https://stackoverflow.com/questions/19004541
复制相似问题