我是使用泛型的新手。我想打印出一对整数和字符串。这是我的代码:
public class Pair<T> {
private T first;
private T second;
public Pair(T first, T second) {
this.first = first;
this.second = second;
}
public T getFirst() {
return first;
}
public T getSecond() {
return second;
}
public void setFirst(T first) {
this.first = first;
}
public void setSecond(T second) {
this.second = second;
}
public <T> void toString(Pair<T> k) {
System.out.println(k.getFirst());
System.out.println(k.getSecond());
}
}
public class TestPair {
public static void main(String[] args) {
Pair<String> pS = new Pair<String>("yay", "it worked" );
Pair<Integer> pI = new Pair<Integer>(1, 2);
pS.toString();
pI.toString();
}
}
目前,它编译但是在运行TestPair课程时,我没有打印出任何内容。
答案 0 :(得分:1)
您需要注意,现在,您的toString()
方法并未覆盖Object.toString()
方法(正如官方Java教程here中所述:覆盖method具有相同的名称,参数的数量和类型,并返回类型作为它覆盖的方法)。 。如果您想要调用toString()
的实现,则需要将Pair
类型的参数传递给它,因为您的toString()
需要Pair
实例作为参数。我建议您将toString
方法更改为:
public void toString() {
System.out.println(this.getFirst());
System.out.println(this.getSecond());
}
在你打电话的情况下:
pS.toString();
pI.toString();
,您得到了正确的结果,因为现在您的toString()
并不需要Pair
参数。
答案 1 :(得分:1)
现在你的方式,你的“toString”接受一个参数,所以你必须像这样传递它(注意添加到toString的参数)。
public static void main(String[] args) {
Pair<String> pS = new Pair<String>("yay", "it worked");
Pair<Integer> pI = new Pair<Integer>(1, 2);
pS.toString(pS);
pI.toString(pI);
}
没有参数 - 它调用对象的默认toString()方法,该方法返回一个字符串表示,如“test.Pair@33909752”,其中类名后跟“@”,后跟地址/指向类的指针。但是因为你没有从Object类的默认toString方法打印返回的值 - 没有打印。
toString通常应编码的方式是返回一个String(你将覆盖该对象的toString方法)。类似的东西:
@Override
public String toString() {
return "Pair [first=" + first + ", second=" + second + "]";
}
然后在您的主程序中,您应该打印它:
System.out.println (pS.toString());
System.out.println (pI.toString());
或简单(因为当暗示打印“toString()”时)
System.out.println (pS);
System.out.println (pI);
答案 2 :(得分:0)
您的代码存在两个问题:
在main方法中,您调用toString()
(零参数),Pair类继承自Object
。此方法返回类似Pair@123
的通用字符串。但是,由于您没有对此字符串执行任何操作,因此您无法获得输出。您可以通过撰写System.out.println(pS.toString());
(甚至是System.out.println(pS);
。
在Pair-class中,您已使用一个参数定义了toString方法。我想你想要覆盖Object.toString()
,所以你也应该使用像public String toString() {return first.toString() + " " + second.toString()}
这样的代码(加上空检查)