В Android Studio, следующий код имеет переменную commandBytes
покрашено, чтобы указать «неявный параметр анонимного класса»:Что означает «подразумеваемый параметр анонимного класса» в этом контексте?
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 на самом деле не помогает: «Это локальная переменная, которая используется анонимным или локальным классом внутри метода и, таким образом, становится полем анонимного класса». Как это применимо? Это что-то, о чем мне нужно беспокоиться?
Мне было любопытно, и Google'd и я вижу, что вы единственный человек в Интернете, задающий этот вопрос :-) Объяснение того, что это значит, кажется довольно очевидным, но не совсем ясно, каковы последствия этого. Пара угадывает: возможно, это просто, чтобы вы знали, что она будет содержать ссылку, так что, возможно, не GC'd? Чтобы предупредить о потенциальных проблемах многопоточности? –
С другой стороны, если это производственный код, тот, кто должен его поддерживать, будет ненавидеть вас. Никто не сможет смотреть на это и определять, что он делает, не тратя много времени. –
На самом деле не производственный код, а слегка адаптированный фрагмент от авторов библиотеки RxAndroidBle для тестирования. Что касается очевидного объяснения, помогите мне, указав анонимный класс, что переменная является неявным параметром? –