这里是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()?
答案 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的答案中一样,而不必假设任何东西。