2017-02-17 10 views
2

は、次のコードはあり、「暗黙の匿名クラスパラメータ」を示すために着色変数commandBytes「暗黙の匿名クラスのパラメータ」とは、この意味で何を意味しますか? Androidのメーカーで

public boolean writeCommand(byte[] commandBytes) { 
if(writeCommandInProgress.compareAndSet(false, true)) { 
    writeSubscription = bleDevice 
      .establishConnection(asBleServiceRef, false) 
      .flatMap(rxBleConnection -> rxBleConnection.writeCharacteristic(asInputCharId, commandBytes)) 
      .subscribe( 
        characteristicValue -> { 
         writeCommandInProgress.set(false); 
         if(!Arrays.equals(characteristicValue, commandBytes)) 
          Log.d(LOG_TAG, "Data read back from writeCommand() doesn't match input"); 
        }, 
        throwable -> Log.d(LOG_TAG, "Error in writeCommand: " + commandBytes.toString() + "; " + throwable.getMessage()) 
      ); 
    return true; 
    } else return false; 
} 

私はこれが何を意味するのかを把握することはできません。 JetBrainsのヘルプサイトの説明は実際には役に立たない:「これは、メソッド内の匿名またはローカルクラスによって使用されるローカル変数であり、したがって匿名クラスのフィールドになる」これはどのように適用されますか?それは私が心配する必要があるものですか?

+0

私は興味があり、Googleはあなたがインターネット上でこの質問をしている唯一の人だと思っています:-)それが意味することの説明はかなり明白ですが、その意味がどういうものかはっきりしていません。カップルの推測:おそらく、それが参照を保持しているので、GCではないかもしれないことを知らせるだけでしょうか?潜在的なマルチスレッドの問題を警告するには? –

+0

別の注記では、これがプロダクションコードの場合、それを維持しなければならない人は誰もあなたを嫌うでしょう。誰もこれを見て、何時間も費やさずに何をするかを決めることはできません。 –

+0

実際には実動コードではなく、RxAndroidBleライブラリの作成者がテスト目的で少し修正したスニペットです。説明は明白ですが、変数が暗黙的なパラメータであることを匿名クラスに指摘して私を助けてください。 –

答えて

3

色付きは、パラメータまたはローカル変数が匿名クラス(この場合はラムダ)の内側で宣言され、使用されていることを示します。これを可能にするために、javacコンパイラは変数を格納するための匿名クラスの合成フィールドを作成します。これはバイトコード(View > Show Bytecode)を調べることで確認できます。

これは心配するものではありません。警告ではなく、情報を提供するための構文の色付けです。変数が暗黙的または明示的にfinalであることを意味するので、コンパイルを中断することなく変数を再割り当てすることはできません。

+0

ああ、私は "匿名クラス"と "ラムダ"の間の接続に失敗しました。おそらく、JetBrainsはJava 8のこのメッセージの更新を考慮する必要があります。 –

関連する問題