Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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
Oop 是否有例外?如果;“是”是否检查?_Oop_Language Agnostic_Exception Handling - Fatal编程技术网

Oop 是否有例外?如果;“是”是否检查?

Oop 是否有例外?如果;“是”是否检查?,oop,language-agnostic,exception-handling,Oop,Language Agnostic,Exception Handling,我想这涉及到一个广泛的话题,但是当一切都以最佳方式完成时,除了理想的变体之外,处理程序工作流的最佳方法是什么呢 让我们更具体一点: 类有一个方法,该方法对其参数进行操作并返回结果。 e、 g: publicmap doTheWork(其他对象oo); 我排除的一个可能的结果是,如果出现其他情况,则返回null,但这是理想的结果 有没有正确的方法(“银弹”或所谓的“最佳实践”)来处理这种情况 我看到三个其他结果: 1-该方法返回空的_映射 2-该方法已检查异常 3-抛出RuntimeExcept

我想这涉及到一个广泛的话题,但是当一切都以最佳方式完成时,除了理想的变体之外,处理程序工作流的最佳方法是什么呢

让我们更具体一点:

类有一个方法,该方法对其参数进行操作并返回结果。 e、 g:

publicmap doTheWork(其他对象oo);
我排除的一个可能的结果是,如果出现其他情况,则返回
null
,但这是理想的结果

有没有正确的方法(“银弹”或所谓的“最佳实践”)来处理这种情况

我看到三个其他结果:

1-该方法返回空的_映射

2-该方法已检查异常

3-抛出RuntimeException

如果这个问题没有普遍正确的答案,那么应该考虑哪些条件


关于契约式设计的原则(简而言之,假设输入参数正确,该方法的责任是处理输出)-该方法抛出任何异常是否正确,或者返回空结果是否更好,尽管结构正确(例如,not null)

返回null就像为某人设置陷阱。(在像HashMaps这样的情况下,我们已经被训练过要注意空值,所以遵循先例是可以的。)用户必须知道要注意空值,并且他们必须编写一个替代路径来处理该情况(听起来很像处理异常),或者冒NPE的风险(在这种情况下,无论如何都会抛出一个异常,只是一个信息量较小的异常,与原始问题发生的位置保持一定距离,因此有关出错原因的信息将丢失)

返回一个空地图会让人不清楚是否出了什么问题。它不像返回null那样有害,但它完全是不明确的。如果返回地图数据纯粹是一件尽最大努力的事情,而用户并不真正需要知道,这也可以。(但这是非常罕见的。)

如果您希望用户能够对异常执行任何操作,则抛出选中的异常可能是合适的


如果用户对此异常无能为力,或者异常只会由于编程错误或测试期间应捕获的某些内容而发生,则可以为使用未检查的异常进行论证。对于应检查什么和应检查什么存在很大的分歧

返回null就像为某人设置陷阱。(在HashMaps这样的情况下,我们已经被训练过要注意null,所以遵循先例是可以的。)用户必须知道要注意null,并且他们必须编写一个替代路径来处理该情况(听起来很像处理异常),或者冒NPE的风险(在这种情况下,无论如何都会抛出一个异常,只是一个信息量较小的异常,与原始问题发生的位置保持一定距离,因此有关出错原因的信息将丢失)

返回一个空地图会让人不清楚是否出了什么问题。它不像返回null那样有害,但它完全是不明确的。如果返回地图数据纯粹是一件尽最大努力的事情,而用户并不真正需要知道,这也可以。(但这是非常罕见的。)

如果您希望用户能够对异常执行任何操作,则抛出选中的异常可能是合适的


如果用户对此异常无能为力,或者异常只会由于编程错误或测试期间应捕获的某些内容而发生,则可以为使用未检查的异常进行论证。对于应检查什么和应检查什么存在很大的分歧

哪一个选项对被调用方最有利?如果您只需要知道一个空映射或返回null,那么就可以了。如果您需要更多信息,那么异常将是更好的选择

至于什么类型的异常,如果被调用方确实需要做些什么才能恢复,那么检查异常是合适的。但是,未检查异常可能更干净


至于返回空映射或空映射,这取决于被调用方将如何处理它。如果您希望被调用方获取该映射并将其传递到其他位置,则空映射是更好的选择。

哪个选项对被调用方最有利?如果您只需要知道返回了空映射或空映射,则可以。如果y你需要更多的信息,那么一个例外将是一个更好的选择

至于什么类型的异常,如果被调用方确实需要做些什么才能恢复,那么检查异常是合适的。但是,未检查异常可能更干净


至于返回null或空映射,这取决于被调用方将如何处理它。如果您希望被调用方获取该映射并将其传递到其他地方,则空映射是更好的选择。

如果您的方法中的某些内容由于用户需要知道的错误输入而中断。因此,异常是最好的方法。Ret使用空数据或空数据可能会让用户认为没有任何错误,这绝对不是您想要的。

如果您的方法中的某些内容由于输入错误而中断,用户需要知道。因此,异常是最好的方法。返回空数据或空数据可能会让用户认为没有任何错误这是错误的,这绝对不是你想要的。

这完全取决于
工作时的问题有多大

  • 如果问题太大,应用程序可能需要关闭,则抛出RuntimeException

  • 如果被调用方可能能够从问题中恢复,则CheckedException是常见的

  • 如果一张空地图没有意义,那么它可以是我们
    public Map<Object,OurObject> doTheWork(OtherObject oo);