【问题标题】:Android Unchecked assignmentAndroid 未经检查的分配
【发布时间】:2019-03-11 18:10:13
【问题描述】:

我在我的应用程序中使用定位服务,并且在我设置权限的地方,我有这个警告:Unchecked assignment: 'java.util.ArrayList' to 'java.util.ArrayList

代码:

permissions.add(Manifest.permission.ACCESS_FINE_LOCATION);
    permissions.add(Manifest.permission.ACCESS_COARSE_LOCATION);
    permissionsToRequest = findUnAskedPermissions(permissions);

警告出现在最后一行。

我在代码开始处定义了这样的数组:

 ArrayList<String> permissions = new ArrayList<>();
ArrayList<String> permissionsToRequest= new ArrayList<>();
ArrayList<String> permissionsRejected = new ArrayList<>();

稍后在我的代码中,我请求许可(如果用户不允许):

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            if (permissionsToRequest.size() > 0) {
                requestPermissions(permissionsToRequest.toArray(new String[permissionsToRequest.size()]),
                        ALL_PERMISSIONS_RESULT);
                canGetLocation = false;
            }
        }

这里的toArray 会导致警告:使用预先确定大小的数组参数“new String[permissionsToRequest.size()]”调用“toArray()”

这里我可以尝试替换为

toArray(new String[0])

但不确定是否正确。

【问题讨论】:

    标签: android arraylist permissions android-permissions toarray


    【解决方案1】:

    对于Unchecked assignment: 'java.util.ArrayList' to 'java.util.ArrayList 警告,我假设findUnAskedPermissions 方法的返回值只是ArrayList 而不是ArrayList&lt;String&gt;(应该是什么)。

    至于Array的创建,inspection hint of IDEA中有解释为什么首选toArray(new String[0])

    将集合转换为数组有两种样式:使用 预先确定大小的数组(如 c.toArray(new String[c.size()]))或 使用空数组(如 c.toArray(new String[0]).

    在较早的 Java 版本中,建议使用预先确定大小的数组,因为 反射调用,这是创建适当大小的数组所必需的 很慢。然而,由于 OpenJDK 6 的更新较晚,这个调用是 内在化,使空数组版本的性能 与预尺寸版本相比,相同,有时甚至更好。 此外,传递预定大小的数组对于并发或 作为数据竞争的同步收集是可能的 sizetoArray 调用可能会导致在 数组的末尾,如果集合在期间同时收缩 操作。

    有一个in-depth analysis 的不同创建数组的方法得出了这个结论:

    toArray(new T[0]) 似乎更快、更安全、合同更简洁,并且 因此现在应该是默认选择。未来的虚拟机优化 可以缩小 toArray(new T[size]) 的性能差距,呈现 当前的“被认为是最佳的”用法与实际 最优的一个。 toArray API 的进一步改进将遵循 与 toArray(new T[0]) 的逻辑相同 — 集合本身应该创建 适当的存储。

    【讨论】:

    • 感谢您的解释!我只定义了 ArrayList permissionsToRequest;然后像 permissionsToRequest.toArray(new String[0]) 一样使用它。效果很好。
    猜你喜欢
    • 2015-05-02
    • 2021-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多