Exception Kotlin-自定义异常作为数据类?

Exception Kotlin-自定义异常作为数据类?,exception,kotlin,Exception,Kotlin,在Kotlin中,创建自定义异常非常容易。下面是一个接受code作为参数的示例: class-requestFailedException(val-code:Int):RuntimeException() 代码包含从服务器返回的http响应错误代码。问题是,当记录器一般报告该异常时,如Timber.e(异常,“加载肖像封面照片url时出错”),输出中的代码将丢失: 2020-02-14 13:50:59.886 15942-16232 E/PortraitManager$watchCoverPh

在Kotlin中,创建自定义异常非常容易。下面是一个接受
code
作为参数的示例:

class-requestFailedException(val-code:Int):RuntimeException()

代码
包含从服务器返回的http响应错误代码。问题是,当记录器一般报告该异常时,如
Timber.e(异常,“加载肖像封面照片url时出错”)
,输出中的
代码将丢失:

2020-02-14 13:50:59.886 15942-16232 E/PortraitManager$watchCoverPhotoUrl: Error loading portrait cover photo url
    com.example.data.PortraitManager$PortraitRequestFailedException
        at com.example.data.PortraitManager$loadCoverPhotoUrl$1.call(PortraitManager.kt:139)

当然,我可以在异常为requestFailedException时添加一个
子句,并专门处理该特定错误,但我不希望这样做(尤其是Kotlin中的所有异常都未经检查,我可能不知道应该使用哪种类型)

我找到了一种将代码作为
消息
参数传递给
运行时异常的简单方法:

class-RequestFailedException(val代码:Int):运行时异常(code.toString())

但这种方法对我来说太冗长了(我需要引用父类构造函数中的
code
),它只会打印
graphicleRequestFailedException:403
,而不会告诉403引用了什么(想象一下这里有多个参数)

因此,我想出了一个主意,将我的自定义异常定义为一个数据类:

数据类失败异常(val代码:Int):RuntimeException()

由于Kotlin中的数据类有一个自动生成的
toString()
方法,其形式为
GraphicRequestFailedException(code=403)
,因此这种表示法具有我想要的所有优点,无需添加冗长或样板代码。日志如下所示:

E/PortraitManager$watchCoverPhotoUrl: Error loading portrait cover photo url
    PortraitRequestFailedException(code=403)
        at com.example.data.PortraitManager$loadCoverPhotoUrl$1.call(PortraitManager.kt:139)


你认为这种方法有什么缺点吗?将异常作为数据类处理有什么危险吗?

我倾向于自己手动重写
toString()
,因为这是
数据类所需要的唯一东西。

但总的来说,它是有效的,实际上没有明显的缺点。

唯一的缺点是不能从数据类继承
E/PortraitManager$watchCoverPhotoUrl: Error loading portrait cover photo url
    PortraitRequestFailedException(code=403)
        at com.example.data.PortraitManager$loadCoverPhotoUrl$1.call(PortraitManager.kt:139)