我有2节课。
Main.java
import java.util.HashMap;
import java.util.Map;
public class Main {
Map<Integer, Row> rows = new HashMap<Integer, Row>();
private Row col;
public Main() {
col = new Row();
show();
}
public void show() {
// col.setCol("one", "two", "three");
// System.out.println(col.getCol());
Row p = new Row("raz", "dwa", "trzy");
Row pos = rows.put(1, p);
System.out.println(rows.get(1));
}
public String toString() {
return "AA: " + rows;
}
public static void main(String[] args) {
new Main();
}
}
和Row.java
public class Row {
private String col1;
private String col2;
private String col3;
public Row() {
col1 = "";
col2 = "";
col3 = "";
}
public Row(String col1, String col2, String col3) {
this.col1 = col1;
this.col2 = col2;
this.col3 = col3;
}
public void setCol(String col1, String col2, String col3) {
this.col1 = col1;
this.col2 = col2;
this.col3 = col3;
}
public String getCol() {
return col1 + " " + col2 + " " + col3;
}
}
输出总是看起来像“Row @ da52a1”或类似。如何解决?我希望能够通过轻松访问每个字符串来执行此类操作:
str="string1","string2","string3"; // it's kind of pseudocode ;)
rows.put(1,str);
rows.get(1);
正如您所看到的,我创建了类Row以将其用作Map的对象,但我不知道我的代码有什么问题。
答案 0 :(得分:2)
将toString
方法覆盖到您的Row
类,如下所示:
@Override
public String toString() {
return col1 + " " + col2 + " " + col3;
}
答案 1 :(得分:0)
向toString
课程添加自定义Row
方法。 toString
是每个Java对象都有的方法。它存在于这样的情况。
答案 2 :(得分:0)
在Row类中覆盖toString方法,并打印要打印的值
在你的情况下,这个方法应该如下,
@Override
public String toString() {
return col1 + " " + col2 + " " + col3;
}
答案 3 :(得分:0)
的System.out.println(rows.get(1));
rows.get(1)
将返回Row
类型的对象。因此,当您将其打印到控制台时,它将打印该对象。
要解决此问题,您可以在返回String的Row类中实现并覆盖toString()
函数。
答案 4 :(得分:0)
你正在 Row @ da52a1 ,因为你最终调用 String的默认toString
方法,它将类名与对象的哈希码结合起来用十六进制表示法。
通过创建自己的toString
方法,您可以告诉编译器,只要在对象上调用toString
,就会显示哪些值。
@Override
public String toString() {
return this.col1 + " " + this.col2 + " " + this.col3;
}
答案 5 :(得分:-1)
return "AA: " + rows; its calling toString method on Row object
实际上你必须附加每列val
试
return "AA: " +col1 + " " + col2 + " " + col3; //typo edited