讲师希望我们给对象一个print()方法而不是重载toString()

时间:2016-09-26 10:20:52

标签: java overloading

当涉及到重载控制台输出时,似乎普遍认为你应该重载toString(),而不是print()。

但是,我的讲师希望我创建一个具有print()方法的对象,目标是打印为该对象定制的特殊输出。

所以,我的问题是,这是正确的吗?好了吗?我应该只是给对象一个重载的toString()方法吗?

这是他希望我们解决的代码:

public static void main(String[] args){
DVD dvd = new DVD(genre, title);
dvd.doSomething();
dvd.print();
}

4 个答案:

答案 0 :(得分:2)

{:mystuff "some of my stuff"} 方法旨在返回对象的toString()表示;在您的情况下,它可能会返回一个类似于String的字符串。这听起来像你的导师希望你在Comedy - Titanic (1997)方法中做的是将输出发送到控制台 - 所以类似print()

更一般地说,有助于您了解最佳做法和提问。但是,请记住,根据我的经验,许多(甚至大多数)教师不熟悉最佳实践,在这种情况下,您应该(1)与您的教师澄清,然后(2)将其写入次优如果教练坚持这样做的话,那就是你的作业。

答案 1 :(得分:1)

  

我的讲师希望我创建一个具有print()方法的对象,目标是打印为该对象定制的特殊输出。

如果那是作业,那么你应该这样做。

至于print() vs toString(),它们可能有不同的用途。为了说明这一点,假设您的Person课程包含namephone和多个地址字段(street1street2city,{ {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()方法中,你就会遇到麻烦。