2016-07-06 1 views
1

と私は、Javaとkotlinにpermissionsdispatcher使用できる1社の許可を - しかし、それはこのように複数の権限に来る:permissionsdispatcherと複数の@ NeedsPermissionのkotlin

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

私はkotlin上の問題を取得する - それは受け入れませんそこに複数のパラメータは - 波括弧{...}は、配列を作成するための簡単な表現であるJavaの@NeedsPermission({...})でJava

+0

詳細を教えてください - あなたが試したKotlinコードとそのエラーは何ですか? –

+0

この場合の構文について質問しますか? '@NeedsPermission(Manifest.permission.BLUETOOTH_ADMIN、Manifest.permission.BLUETOOTH)'が機能しているようです。 Javaの 'String [] value();'はKotlinのvarargパラメータとして認識されます。 – AndroidEx

+0

@AndroidExでkotlinのバージョンがこれで使えますか?私は1.0.3を実行し、この構文はここで失敗します – ligi

答えて

4

{}は、配列を作成し、この文脈でKotlinに{}が誤っlambda expressionを作成しているし、ラムダ内のコードが無効であるので、あなたが意図し何を決定することはできません表します。

だから、注釈では、アレイは、varargので、あなただけの要素を一覧表示することができますとして扱われている@NeedsPermission(array)

として代わりに権限の配列を渡すの@NeedsPermission(someFunctionReferenceThatIsInvalid)を言っている:

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

の場合それは配列として扱われていたので、関数を使用します:

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

配列を作成して* spread operatorを使用する例では、基本的に配列を実行してから元に戻すため、必要ありません。

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

で正常に動作します。 kotlinでは、{}がラムダ式用に予約されているため、配列であると明示的に言う必要があります。 Javaでは

+0

' * 'はあなたの' array'を元に戻します。配列の作成またはスプレッド演算子の使用。 –

+0

これは他の人によって変更されていますが、私の元の回答には '*' – sockeqwe

関連する問題