从 toString 方法抛出异常

埃兰·莫拉德

我有一个 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 所述 - 覆盖 Object 的 toString() 方法,但我必须抛出异常

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

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

头足类动物

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

StringBuilder .ToString()抛出OutOfMemory异常

方法 Laravel\\Passport\\Bridge\\AccessToken::__toString() 不能抛出异常

Symfony 3 easyadmin __toString() 不能抛出异常

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

方法抛出“javax.persistence.EntityNotFoundException”异常。无法评估 domain.MerchantTag$HibernateProxy$zHiEXWeN.toString()

Laravel / Sentry Eloquent \ User :: __ toString()不能抛出异常

如何修复“方法 kartik\form\ActiveField::__toString() 不得抛出异常,捕获错误:在 null 上调用成员函数 formName()”?

从Java中的toString方法捕获异常

StringBuilder.ToString()抛出OutOfMemoryException

toString() 错误,无法解析方法 toString()

无法覆盖toString方法

数组的toString方法

Java toString方法的实现

覆盖模型tostring方法

何时使用toString()方法

重写EntityResponse toString方法

浮动类toString方法

重写toString方法?

实体框架ToString方法

Java super toString方法

获取枚举的 ToString 方法

方法Illuminate \\ View \\ View :: __ toString()不得在Unix中引发异常

Laravel错误:方法Illuminate \ View \ View :: __ toString()不得引发异常

Laravel错误:方法Illuminate \ View \ View :: __ toString()不得引发异常

laravel方法Illuminate \ View \ View :: __ toString()不得引发异常

主方法抛出异常

无法解决我的 toString 抛出的 NullPointerException

ToString抛出NullReferenceException为单位值()

ComboBox.SelectedValue.ToString() 抛出 NullReferenceException