Java 向toString方法头添加throws子句时出现问题

Java 向toString方法头添加throws子句时出现问题,java,exception,checked,Java,Exception,Checked,有人能帮忙吗?我是一名CS学生,正在用java进行一个项目。我们需要创建一个在LinkedQueue类中抛出的已检查异常。一切都很好。在LinkedQueue上方的我的类中,我们需要确认异常,而不是处理它。因此,对于类中调用LinkedQueue方法的每个方法,我添加了“throws EmptyQueueException”。除了toString方法外,它也可以工作。当我添加throws子句时,我得到一个错误 “重写器java.lang.Object.toString” 及 中的异常EmptyQ

有人能帮忙吗?我是一名CS学生,正在用java进行一个项目。我们需要创建一个在LinkedQueue类中抛出的已检查异常。一切都很好。在LinkedQueue上方的我的类中,我们需要确认异常,而不是处理它。因此,对于类中调用LinkedQueue方法的每个方法,我添加了“throws EmptyQueueException”。除了toString方法外,它也可以工作。当我添加throws子句时,我得到一个错误

“重写器java.lang.Object.toString”

中的异常EmptyQueueException与Object.toString中的throws子句不兼容

有什么想法/帮助吗


非常感谢

你不能。
对象#toString()
方法的约定保证它不会抛出任何已检查的异常,并且由于属于
对象的任何内容(所有内容)都必须满足此约定,因此不能添加已检查的异常
toString()
无论如何都不应该抛出任何类型的异常,因为它在整个应用程序中的数千个位置都被使用,并且应该可以“安全”调用。

您不能。
对象#toString()
方法的约定保证它不会抛出任何已检查的异常,并且由于属于
对象的任何内容(所有内容)都必须满足此约定,因此不能添加已检查的异常
toString()
无论如何都不应该抛出任何类型的异常,因为在整个应用程序中,它在数千个地方都被使用,并且应该可以“安全”调用。

您不能这样做。您的类重写了toString方法,这意味着您不能更改其签名。这包括异常。它与
toString()
签名有关。因为它是一个重写,所以它需要与它所重写的方法保持相同的形式。这包括返回类型、访问级别、参数和抛出声明。您不能对此进行修改。您的类重写了toString方法,这意味着您不能更改其签名。这包括异常。它与
toString()
签名有关。因为它是一个重写,所以它需要与它所重写的方法保持相同的形式。这包括返回类型、访问级别、参数和抛出声明?我问我的教授是否可以将其更改为未检查的异常,答案是否。它被抛出到linkedqueue的.front()方法中,如果我想知道我正在打印什么,我需要在toString中调用它!我是否可以在其他地方确认这一点,以覆盖toString或以其他方式处理它?Thanks@WantaghMomma然后,您必须重新启动并处理异常,而不是从方法中抛出它。@WantaghMomma事实上,当抛出异常以提供其他上下文详细信息时,通常会调用
toString()
。从
catch
块抛出异常是一个非常好的主意,因为当前异常将被中止,其上下文将丢失。相反,返回空字符串或默认值。这将节省很多时间。@WantaghMomma您不应该无条件地调用
front()
或任何方法。相反,首先检查您的队列是否为空。如果您提供了
toString()
的实际代码,我们可能会提供帮助。谢谢大家。那么我该怎么办?我问我的教授是否可以将其更改为未检查的异常,答案是否。它被抛出到linkedqueue的.front()方法中,如果我想知道我正在打印什么,我需要在toString中调用它!我是否可以在其他地方确认这一点,以覆盖toString或以其他方式处理它?Thanks@WantaghMomma然后,您必须重新启动并处理异常,而不是从方法中抛出它。@WantaghMomma事实上,当抛出异常以提供其他上下文详细信息时,通常会调用
toString()
。从
catch
块抛出异常是一个非常好的主意,因为当前异常将被中止,其上下文将丢失。相反,返回空字符串或默认值。这将节省很多时间。@WantaghMomma您不应该无条件地调用
front()
或任何方法。相反,首先检查您的队列是否为空。如果您提供了
toString()
的实际代码,我们可能会提供帮助。谢谢大家。