【问题标题】:Why are integers treated as enums in this code snippet?为什么在此代码片段中整数被视为枚举?
【发布时间】:2019-10-10 15:50:31
【问题描述】:

我正在按照 Android 开发人员的指南和资源编写我的第一个 Android 应用程序。我的背景:显然对 android 开发的经验为零,而对 java 的经验很少。后者可能是我被卡住的原因。

那么,看看这段代码 sn-p 处理权限(来自https://developer.android.com/training/permissions/requesting):

ActivityCompat.requestPermissions(thisActivity,
    new String[]{Manifest.permission.READ_CONTACTS},
    MY_PERMISSIONS_REQUEST_READ_CONTACTS);

// MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
// app-defined int constant. The callback method gets the
// result of the request.

如您所见,它说 MY_PERMISSIONS_REQUEST_READ_CONTACTS 是一个 int 常量。

然后,展示回调方法onRequestPermissionsResult()的实现:

public void onRequestPermissionsResult(int requestCode,
        String[] permissions, int[] grantResults) {
    switch (requestCode) {
        case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {
            // If request is cancelled, the result arrays are empty.
            if (grantResults.length > 0
                && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                // permission was granted, yay! Do the
                // contacts-related task you need to do.
            } else {
                // permission denied, boo! Disable the
                // functionality that depends on this permission.
            }
            return;
        }

        // other 'case' lines to check for other
        // permissions this app might request.
    }
}

如您所见,switch 语句将 requestCode 视为不是 int,但它看起来像是将其视为 Enum。但是如果我尝试将枚举传递给 requestPermissions() 它会给我一个错误,因为方法签名要求 requestCode 是一个 int。

我错过了什么?

【问题讨论】:

    标签: java android enums int android-permissions


    【解决方案1】:

    说来话长。简而言之 - 性能和内存效率。

    这里有更多细节https://android.jlelse.eu/android-performance-avoid-using-enum-on-android-326be0794dc3

    这里是谷歌的视频https://www.youtube.com/watch?v=Hzs6OBcvNQE

    但如今,如果您真的需要枚举,可以在代码中使用枚举。

    关于requestCode,Android系统只使用低16位。 (

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多