1

想强制使用权限并“快速失败”——一些较旧的 API 会默默地失败 IIRC——所以我想出了:

private static void assertPermission(Context ctx, String perm) {
    final int checkPermission = ctx.getPackageManager().checkPermission(
        perm, ctx.getPackageName());
    if (checkPermission != PackageManager.PERMISSION_GRANTED) {
        throw new IllegalStateException("Permission " + perm
            + " is required");
    }
}

我想使用适合抽象的权限 - 并遵循有效的 Java 建议:支持使用标准异常。

  • 我应该使用IllegalStateException还是有一些更合适的例外?
  • 我应该使用检查异常吗?
4

2 回答 2

2

如果你想要一个通用的 Java 异常,我会使用 a UnsupportedOperationException,它RuntimeException在尝试不支持的操作时使用。

根据文档,IllegalStateException与虚拟机本身的联系更紧密:

在 VM 未处于正确状态时尝试执行操作时引发。

于 2013-09-19T14:32:53.587 回答
0

根据@Selvin 的评论,我让 android 抛出异常 - 我得到:

09-20 17:13:39.115: E/AndroidRuntime(1688): java.lang.SecurityException: 需要 READ_PHONE_STATE: 用户 10064 和当前进程都没有 android.permission.READ_PHONE_STATE。

所以看起来 android 确实使用了java.lang.SecurityException- 为了与 android 保持一致,我将不得不使用它

于 2013-09-20T15:21:23.803 回答