首页 文章

permissionsdispatcher和多个@NeedsPermission与kotlin

提问于
浏览
1

对于一个权限,我可以在java和kotlin中使用permissionsdispatcher - 但是当涉及多个权限时,如下所示:

@NeedsPermission({Manifest.permission.BLUETOOTH_ADMIN,Manifest.permission.BLUETOOTH})

我在kotlin上遇到了一个问题 - 它不接受多个参数 - 用java工作正常

2 回答

  • 4

    在Java中, {} 表示创建一个数组,并且在Kotlin的这个上下文中, {} 意外地创建了lambda expression,并且无法确定您的意图,因为lambda中的代码无效 .

    所以你说 @NeedsPermission(someFunctionReferenceThatIsInvalid) 而不是传递一个权限数组 @NeedsPermission(array)

    在注释中,数组被视为 vararg ,因此您只需列出元素:

    @NeedsPermission(Manifest.permission.BLUETOOTH_ADMIN, Manifest.permission.BLUETOOTH)
    

    如果将它视为数组,则使用 arrayOf 函数:

    @NeedsPermission(arrayOf(Manifest.permission.BLUETOOTH_ADMIN, Manifest.permission.BLUETOOTH))
    

    创建数组然后使用* spread operator的示例基本上是在做,然后撤消数组,这是没有必要的 .

  • 0
    @NeedsPermission(arrayOf(Manifest.permission.BLUETOOTH_ADMIN,Manifest.permission.BLUETOOTH))
    

    在java @NeedsPermission({...}) 中,大括号 {...} 只是创建数组的简写 . 在kotlin中,你必须明确地说它是一个数组,因为 {} 是为lambda表达式保留的 .

相关问题