Lecturer 希望我们给一个对象一个 print() 方法而不是重载 toString()
Lecturer wants us to give an object a print() method instead of overloading toString()
当谈到重载控制台输出时,似乎普遍认为您应该重载 toString(),而不是 print()。
但是,我的讲师希望我创建一个具有 print() 方法的对象,目的是打印为该对象定制的特殊输出。
所以,我的问题是,这是正确的吗?好了吗?我应该只给对象一个重载的 toString() 方法吗?
这是他希望我们解决的代码:
public static void main(String[] args){
DVD dvd = new DVD(genre, title);
dvd.doSomething();
dvd.print();
}
toString()
方法旨在return对象的String
表示;在您的情况下,它可能 return 看起来像 Comedy - Titanic (1997)
的字符串。听起来您的讲师希望您在 print()
方法中执行的操作是将该输出发送到控制台——类似于 System.out.println(this)
.
更笼统地说,这对您了解最佳做法和提出问题很有帮助。但是,请记住,根据我的经验,许多(甚至大多数)讲师都不熟悉最佳实践,在这种情况下,您应该(1)与您的讲师澄清,然后(2)将其写在次优的如果老师坚持要那样做,那只是为了你的作业。
我认为您的讲师实际上希望您学习最佳实践,即使在本例中这是一个坏主意。想象一下,如果 DVD 是别的东西,而你不能只是 System.out.println
它。他是这样教你的,因为让我们说在屏幕上打印 DVD 图片只是为了测试会很困难而且效率不高。这是我的意见,但老师有一些技巧,我认为这是其中之一。想象一下打印方法现在只是一个 stub
,稍后你将不得不实现更高级的功能(比如在屏幕上打印 DVD 的图片)并且将它打印到控制台在这一刻是令人满意的,就是这样接口知道方法存在,功能在这个阶段并不重要。
没错。如果下一个练习是在 print() 中调用另一个函数怎么办?
Object.toString() 文档说:
Returns a string representation of the object.
使用此方法的输出显示给您的最终用户并没有错,但主要用于内部调试目的。您绝对不想从 toString 方法调用另一个方法。
toString() 方法必须非常简单。
如果你想像这样添加对另一个函数的调用怎么办:
public void print() {
System.out.println(getLabel());
sendToThePrinter()
}
你看到问题了吗?如果之后将其放入 toString() 方法中,就会遇到麻烦。
My lecturer wants me to create an object that has a print()
method, with the goal of printing a special output tailored to that object.
如果那是作业,那么这就是你应该做的。
至于print()
和toString()
,他们可能有不同的目的。为了说明,假设您有一个 Person
class 和 name
、phone
和多个地址字段(street1
、street2
、city
、state
和 zipcode
)。
toString()
应该 return 一个有助于识别对象的简短描述性字符串。它经常在调试时使用,其中 List<Person>
将显示逗号分隔列表中的对象,例如
[John Doe, Jane Smith]
如果 toString()
方法 return 的信息太多,List.toString()
输出将无法用于调试。
print()
是专门用来打印对象本身的,所以可能要打印多行,例如
Name: John Doe
Phone: 123-555-1212
Address: 123 Main St.
Apt. 5
Pleasantville, NY 10570
您不希望 toString()
到 return 那样的多行字符串。
当谈到重载控制台输出时,似乎普遍认为您应该重载 toString(),而不是 print()。
但是,我的讲师希望我创建一个具有 print() 方法的对象,目的是打印为该对象定制的特殊输出。
所以,我的问题是,这是正确的吗?好了吗?我应该只给对象一个重载的 toString() 方法吗?
这是他希望我们解决的代码:
public static void main(String[] args){
DVD dvd = new DVD(genre, title);
dvd.doSomething();
dvd.print();
}
toString()
方法旨在return对象的String
表示;在您的情况下,它可能 return 看起来像 Comedy - Titanic (1997)
的字符串。听起来您的讲师希望您在 print()
方法中执行的操作是将该输出发送到控制台——类似于 System.out.println(this)
.
更笼统地说,这对您了解最佳做法和提出问题很有帮助。但是,请记住,根据我的经验,许多(甚至大多数)讲师都不熟悉最佳实践,在这种情况下,您应该(1)与您的讲师澄清,然后(2)将其写在次优的如果老师坚持要那样做,那只是为了你的作业。
我认为您的讲师实际上希望您学习最佳实践,即使在本例中这是一个坏主意。想象一下,如果 DVD 是别的东西,而你不能只是 System.out.println
它。他是这样教你的,因为让我们说在屏幕上打印 DVD 图片只是为了测试会很困难而且效率不高。这是我的意见,但老师有一些技巧,我认为这是其中之一。想象一下打印方法现在只是一个 stub
,稍后你将不得不实现更高级的功能(比如在屏幕上打印 DVD 的图片)并且将它打印到控制台在这一刻是令人满意的,就是这样接口知道方法存在,功能在这个阶段并不重要。
没错。如果下一个练习是在 print() 中调用另一个函数怎么办? Object.toString() 文档说:
Returns a string representation of the object.
使用此方法的输出显示给您的最终用户并没有错,但主要用于内部调试目的。您绝对不想从 toString 方法调用另一个方法。 toString() 方法必须非常简单。
如果你想像这样添加对另一个函数的调用怎么办:
public void print() {
System.out.println(getLabel());
sendToThePrinter()
}
你看到问题了吗?如果之后将其放入 toString() 方法中,就会遇到麻烦。
My lecturer wants me to create an object that has a
print()
method, with the goal of printing a special output tailored to that object.
如果那是作业,那么这就是你应该做的。
至于print()
和toString()
,他们可能有不同的目的。为了说明,假设您有一个 Person
class 和 name
、phone
和多个地址字段(street1
、street2
、city
、state
和 zipcode
)。
toString()
应该 return 一个有助于识别对象的简短描述性字符串。它经常在调试时使用,其中 List<Person>
将显示逗号分隔列表中的对象,例如
[John Doe, Jane Smith]
如果 toString()
方法 return 的信息太多,List.toString()
输出将无法用于调试。
print()
是专门用来打印对象本身的,所以可能要打印多行,例如
Name: John Doe
Phone: 123-555-1212
Address: 123 Main St.
Apt. 5
Pleasantville, NY 10570
您不希望 toString()
到 return 那样的多行字符串。