Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
kotlin中的惯用异常处理_Kotlin_Exception - Fatal编程技术网

kotlin中的惯用异常处理

kotlin中的惯用异常处理,kotlin,exception,Kotlin,Exception,处理异常时,我发现自己需要这个方便的小功能: inline-fun-exec(lambda:()->Any):Boolean=try{lambda();true}catch(e:Exception){false} Kotlin中是否存在类似的函数? 繁重的try-catch-finnaly语法是否有惯用的替代方法?您可以使用runCatching,然后对结果使用。issucess获得布尔值以获得成功 runCatching { // your code }.isSuccess 如果您

处理异常时,我发现自己需要这个方便的小功能:

inline-fun-exec(lambda:()->Any):Boolean=try{lambda();true}catch(e:Exception){false}
Kotlin中是否存在类似的函数?
繁重的try-catch-finnaly语法是否有惯用的替代方法?

您可以使用
runCatching
,然后对结果使用
。issucess
获得布尔值以获得成功

runCatching {
    // your code
}.isSuccess
如果您的代码需要一个结果,并且希望在失败时返回null(这是习惯用法的Kotlin),那么您可以这样做

val foo: Foo? = runCatching {
    // your code that produces a Foo
}.getOrNull()

出于好奇:您的用例是什么?就我个人而言,我更喜欢异常,而不是只返回
成功的
布尔值的函数,因为在不同的错误场景中可以抛出不同的异常,从而允许不同的错误处理。  如果抛出异常,您如何判断出错的原因?  您的函数完全吞咽异常,甚至不记录它。  所以,无法找出抛出了什么异常、抛出在哪里,或者包含了什么消息。  (如果你假设只有一件事情可能出错,那么你很可能错过了一些东西……)  这样的函数使调试编码问题或处理多种类型的错误条件变得不可能……它还需要(但不强制)直接调用方检查返回值,然后在那里处理它,或者将它返回给调用方,等等。  最后,它要求lambda返回一个不可为null的值,然后忽略它。在某些情况下,当与Java代码交互时,可能需要将异常抛出代码包装为在失败时仅返回null的内容。但通常情况下,您只希望包装您预期的特定异常,如
IllegalArgumentException
NumberFormatException
,作为一种吞咽不需要记录的异常的方法,因为它们表示您预期可能发生的事情,就像您传递用户输入以进行某种验证一样。@vatbub这就像是
kotlin val isAudio=isAudioFile(source)&&exec{m.setDataSource(source.canonicalPath)}
setDataSource在数据可用性出现任何问题时会抛出的那样