Android文档:SoundPool的构造函数返回null?

3
我知道这个通用问题已经在 这个 stackoverflow 主题中讨论过了(构造函数从不返回 null),但考虑到它在这个具体问题中的重要性,我想知道 SoundPool 的官方 Android 文档的 构造函数 是否是错误的:

构造函数。如果创建失败则返回 SoundPool 对象,否则返回 null。

我问这个问题是因为我们正在谈论 Android 官方文档,这些文档已经存在多年了(在 SoundPool 的情况下)。
检查 Android 源代码,SoundPool 构造函数出现错误时会抛出 RuntimeException。(早期版本的 Android 甚至没有抛出异常。)也许文档试图表达的是,如果捕获了异常,则存储对象引用的变量仍然为空?在这种情况下,文档仍然措辞非常糟糕。我有什么遗漏的吗? 编辑: 考虑到这可能不是一个很丰富的问题(即使它可能很有用-请参见我的评论),简单的 就足够了,然后线程可以关闭。我想确定我没有忽略任何东西。

不好意思,但为什么会有“离题”和“不是一个真正的问题”的投票呢?这绝对是相关的。它可能是一个完全重复的问题(并且可能会因此被关闭),但绝对是一个明确定义的问题。而“不是一个真正的问题”?这很清楚:官方的Android文档是错误的还是正确的?这是一个真正而清晰的与编程相关的问题。 - Thomas Calc
而且非常实用,尤其是对于初学者安卓程序员来说:想象一下我们会看到多少代码,其中程序员会对新实例化的SoundPool引用进行空值检查... - Thomas Calc
即使初学者程序员知道构造函数不能返回null,他们可能会添加null检查以遵循文档的100%。然后这样的代码就会上网,传播,并误导完全的新手。 - Thomas Calc
1个回答

1
  1. 构造函数不能返回null。它们可以抛出异常,但如果成功创建对象,则除了该对象之外,它们不能返回任何东西。
  2. 正如您所发现的,SoundPool在其构造函数中可能会抛出异常。您可以忽略它。他们特别选择抛出一个RuntimeException(在2.3+上)而不是一个需要经常处理的已检查异常,这表明API设计者认为这是足以使应用程序崩溃的足够好的原因,不需要经常处理。
  3. 如果您真的必须处理异常,那么我建议您简单地通知用户并立即退出。

所以,它不能返回null。但是,如果您处理异常,那么是的,您对对象的引用将是null,因为构造函数未完成。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接