当涉及到重载控制台输出时,似乎普遍认为你应该重载toString(),而不是print()。
但是,我的讲师希望我创建一个具有print()方法的对象,目标是打印为该对象定制的特殊输出。
所以,我的问题是,这是正确的吗?好了吗?我应该只是给对象一个重载的toString()方法吗?
这是他希望我们解决的代码:
public static void main(String[] args){
DVD dvd = new DVD(genre, title);
dvd.doSomething();
dvd.print();
}
答案 0 :(得分:2)
{:mystuff "some of my stuff"}
方法旨在返回对象的toString()
表示;在您的情况下,它可能会返回一个类似于String
的字符串。这听起来像你的导师希望你在Comedy - Titanic (1997)
方法中做的是将输出发送到控制台 - 所以类似print()
。
更一般地说,有助于您了解最佳做法和提问。但是,请记住,根据我的经验,许多(甚至大多数)教师不熟悉最佳实践,在这种情况下,您应该(1)与您的教师澄清,然后(2)将其写入次优如果教练坚持这样做的话,那就是你的作业。
答案 1 :(得分:1)
我的讲师希望我创建一个具有
print()
方法的对象,目标是打印为该对象定制的特殊输出。
如果那是作业,那么你应该这样做。
至于print()
vs toString()
,它们可能有不同的用途。为了说明这一点,假设您的Person
课程包含name
,phone
和多个地址字段(street1
,street2
,city
,{ {1}}和state
)。
zipcode
应返回一个简短的描述性字符串,以帮助识别对象。它通常在调试时使用,其中toString()
将以逗号分隔的列表显示对象,例如。
List<Person>
如果[John Doe, Jane Smith]
方法返回的信息太多,toString()
输出将无法用于调试。
List.toString()
专门用于打印对象,因此可能需要在多行上打印,例如
print()
您不希望Name: John Doe
Phone: 123-555-1212
Address: 123 Main St.
Apt. 5
Pleasantville, NY 10570
返回类似的多行字符串。
答案 2 :(得分:0)
我认为你的导师实际上希望你学习最佳实践,即使在这个例子中,这也是一个坏主意。想象一下,如果DVD是其他东西,你不能只是System.out.println
它。他这样教你,因为让我们说在屏幕上打印DVD的图片是困难而且效率不高,只是为了测试。这是我的观点,但教师有一些技巧,我认为这是其中之一。想象一下,打印方法现在只是一个stub
,你必须在以后实现更高级的功能(比如在屏幕上打印DVD的图片),然后将它打印到控制台就满足了,就这样接口知道该方法存在且功能在此阶段并不重要。
答案 3 :(得分:0)
这没错。如果下一个练习是在print()中调用另一个函数怎么办? Object.toString()文档说:
返回对象的字符串表示形式。
使用此方法的输出向最终用户显示并没有错,但大多数情况下它用于内部调试目的。你绝对不希望从toString方法调用另一个方法。 toString()方法必须简单愚蠢。
如果您想要调用另一个函数,如下所示:
public void print() {
System.out.println(getLabel());
sendToThePrinter()
}
你看到了问题吗?如果你之后将它放在你的toString()方法中,你就会遇到麻烦。