如何用String表示对象有用?在toString上调整()

时间:2016-07-27 23:55:52

标签: java

这里是Java初学者,目前我的java教科书中遇到了一些问题,有时会发现自己使用toString,因为本书列出了一些类似的例子。

在谷歌搜索toString()的有用性后,我读了许多SO答案,说你用string代表一个对象很有用。

考虑以下我刚刚编写的例子

class Frog{

    private String name;
    private int id;
    public Frog(int id, String name)
    {
        this.id = id;
        this.name = name;
    }
    public String toString(){
        return id + ":" + name;
    }

}

public class DataSet{
    public static void main(String [] args){
        Frog frog1 = new Frog(7,"Freddy");
        Frog frog2 = new Frog(5,"Rogers");
        System.out.println(frog1);
        System.out.println(frog2);
    }
}

好吧很酷。我创建frog1, frog 2对象后立即调用toString。现在第一个问题是 这对远程有用吗?

现在考虑其他事情, 假设我添加了自己的String方法

public String imitateToString(){
        return id+":" + name;
    }

现在我们可以做到

String newFrogOne = frog1.imitateToString();
String newFrogTwo = frog1.imitateToString();
System.out.println(newFrogOne);

这不是与toString()?相同的目的吗?我想我想要做的是,我不能制作另一个String方法并做同样的事情我在toString()?

做了

3 个答案:

答案 0 :(得分:1)

关于标题:嗯,显然像

date.toString()

很有用,不是吗?如果你必须展示一件事情,那么对于用户,您必须将该事物转换为字符串。

通常,有一天需要显示所有内容,即使它只是在调试跟踪消息中。

关于是否可以调用字符串转换器方法的任何其他名称的问题:嗯,是的。但是有一些案例内置于语言和公共库中,它们将调用toString()并且不会调用yourNotQuiteTheSameMethod()。

琐碎的例子:

 String text = "the value is " +  something;

假设'某事'不是String,有一个对something.toString()的调用会在那里发生。

答案 1 :(得分:0)

toString()会覆盖由“Object”类定义的toString(),这意味着即使“Frog”未在“Frog”的上下文中使用,也可以使用它。 System.out.println()适用于您的第一个示例,因为println()需要一个instanceof Object,而“toString()”是在Object中定义的。

例如,使用toString(),这是有效的:

Frog frogAsFrog = new Frog(7,"Freddy");
String newFrogOne = frogfrogAsFrog.imitateToString(); //valid

Object frogAsObject = new Frog(5,"Rogers");
String newFrogTwo = frogAsObject.imitateToString();
//^invalid because "imitateToString()" is not defined in type "Object"

如果你要使用toString()以外的东西:

ArrayList<Object> objects = new ArrayList<Object>();
objects.add("Hello");
objects.add("World");
objects.add(new Frog(7,"Freddy"));

for (Object object : objects) {
    System.out.println(object);
}

以下是一个有用的原因的概念性示例:

keyboard123 = (KeyboardView) Tab2View.findViewById(R.id.keyboard123);
Keyboard k1 = new Keyboard(Tab2View.getContext(), R.xml.qwerty_keyboard);
k1 = new Keyboard(Tab2View.getContext(), com.android.internal.R.id.keyboardView);
keyboard123.setKeyboard(k1);

如果你定义了imitateToString(),那就不行了,因为imitateToString()没有在Object中定义。

答案 2 :(得分:0)

我认为典型的用法是使用toString()来打印对象的状态,关键特性或属性的总结,就像在您的实现中一样。

imitateToString()方法当然提供完全相同的输出。不同之处在于您可以安全地假设java中的每个对象都将提供toString方法,但您需要知道Frog对象的细节,以确定它提供了imitateToString()方法。

因此,如果你想循环遍历一堆不同的对象并检查它们的状态,你可以简单地调用它们的toString()方法,就像在Zachary的答案中一样,而不必假设任何东西。