从toString方法引发异常

时间:2019-11-11 18:57:20

标签: java exception

我有一个Java类pojo,在其中我希望Object.toString()方法返回该对象的JSON表示形式。 toString()的用户仅需要JSON。这是我的toString()。

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectWriter;

@Override
public String toString(){
    ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter();
    String json = null;
    try {
        json = ow.writeValueAsString(this);
    } catch (JsonProcessingException e) {
        e.printStackTrace();
    }
    return json;
}

问题是上述代码将吞没异常并允许执行继续。为避免此类问题,我们可以抛出异常或将异常重新抛出为未经检查的异常,如此处Java - overriding Object's toString() method, but I have to throw exceptions所述。

但是,toString()不允许我们抛出异常。因此,我们只能抛出未经检查的异常。 上面的链接选择的答案是“从toString()抛出异常是一个非常糟糕的主意”。它建议返回一个错误字符串,这对我来说似乎很糟糕,因为我们实际上只是在吞没异常。另一个建议是改为抛出IllegalStateExcception。这是在这种情况下抛出的理想例外,还是我们应该抛出另一种例外?谢谢。

更新:我更正了我的代码中的一个错误。 toString()方法不带参数。

1 个答案:

答案 0 :(得分:4)

我也建议不要抛出toString中的异常。该方法通常用于调试目的(无论是通过System.out还是与调试器一起使用)。扔东西只会使事情复杂化,并使一切变得更困难。

相反,我建议添加一个抛出JsonProcessingException或RuntimeException的子类的toJSON方法,并实现toString,使其调用toJson,捕获所有异常并在这种情况下返回错误消息