使用泛型的toString()方法

时间:2018-02-10 20:40:35

标签: java generics

我是使用泛型的新手。我想打印出一对整数和字符串。这是我的代码:

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课程时,我没有打印出任何内容。

3 个答案:

答案 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()}这样的代码(加上空检查)