Java-重写Object的toString()方法,但我必须抛出异常

JRo*_*oge 7 java

我遇到了一个必须重写Object的toString()方法的问题,但是原始方法没有引发任何异常。但是,我正在使用一些需要抛出异常的通用代码。

public String toString() throws EmptyListException, InvalidPositionException
{
    Position<Entry<E>> current = fList.first();
    StringBuilder str = new StringBuilder();
    for(int i = 0; i < size(); i++)
    {
        try
        {
            str.insert(str.length(), current.element().toString() + " ");
            current = fList.next(current);
        }
        catch(Exception e){}
    }
    return str.toString();
}
Run Code Online (Sandbox Code Playgroud)

这是FavoriteList.java的一部分。这些异常必须抛出。如果可以通过某种方式抑制这些异常或将其捕获到方法中,那将很有帮助。

最后,我的方法标题必须如下所示:

public String toString()
{ content }
Run Code Online (Sandbox Code Playgroud)

我不在乎方法的结尾内容。只要可以编译,我就很好。我只需要修复标题,但是找不到解决方法。提前非常感谢您。

小智 14

首先,抛出异常toString()是一个非常糟糕的主意。toString()用于许多系统软件(例如调试器)中以生成对象的表示形式。

第一个优先选择是做其他事情,可能创建一个可能抛出的不同方法,并在toString()调用该方法时捕获异常并产生替换输出,例如

super().toString() + " threw " + exception.toString();
Run Code Online (Sandbox Code Playgroud)

如果您确实必须抛出,则可以执行以下操作:

    try
    {
        str.insert(str.length(), current.element().toString() + " ");
        current = fList.next(current);
    }
    catch(Exception e){
       throw new IllegalStateExcception(super.toString(), e);
    }
Run Code Online (Sandbox Code Playgroud)

这会将检查的异常(从java.lang.Exception派生)包装在未检查的异常(从java.lang.RuntimeException派生)中。无需添加throws子句。