对于一个权限,我可以在java和kotlin中使用permissionsdispatcher - 但是当涉及多个权限时,如下所示:
@NeedsPermission({Manifest.permission.BLUETOOTH_ADMIN,Manifest.permission.BLUETOOTH})
我在kotlin上遇到了一个问题 - 它不接受多个参数 - 用java工作正常
在Java中, {} 表示创建一个数组,并且在Kotlin的这个上下文中, {} 意外地创建了lambda expression,并且无法确定您的意图,因为lambda中的代码无效 .
{}
所以你说 @NeedsPermission(someFunctionReferenceThatIsInvalid) 而不是传递一个权限数组 @NeedsPermission(array)
@NeedsPermission(someFunctionReferenceThatIsInvalid)
@NeedsPermission(array)
在注释中,数组被视为 vararg ,因此您只需列出元素:
vararg
@NeedsPermission(Manifest.permission.BLUETOOTH_ADMIN, Manifest.permission.BLUETOOTH)
如果将它视为数组,则使用 arrayOf 函数:
arrayOf
@NeedsPermission(arrayOf(Manifest.permission.BLUETOOTH_ADMIN, Manifest.permission.BLUETOOTH))
创建数组然后使用* spread operator的示例基本上是在做,然后撤消数组,这是没有必要的 .
@NeedsPermission(arrayOf(Manifest.permission.BLUETOOTH_ADMIN,Manifest.permission.BLUETOOTH))
在java @NeedsPermission({...}) 中,大括号 {...} 只是创建数组的简写 . 在kotlin中,你必须明确地说它是一个数组,因为 {} 是为lambda表达式保留的 .
@NeedsPermission({...})
{...}
2 回答
在Java中,
{}
表示创建一个数组,并且在Kotlin的这个上下文中,{}
意外地创建了lambda expression,并且无法确定您的意图,因为lambda中的代码无效 .所以你说
@NeedsPermission(someFunctionReferenceThatIsInvalid)
而不是传递一个权限数组@NeedsPermission(array)
在注释中,数组被视为
vararg
,因此您只需列出元素:如果将它视为数组,则使用
arrayOf
函数:创建数组然后使用* spread operator的示例基本上是在做,然后撤消数组,这是没有必要的 .
在java
@NeedsPermission({...})
中,大括号{...}
只是创建数组的简写 . 在kotlin中,你必须明确地说它是一个数组,因为{}
是为lambda表达式保留的 .