什么"隐式匿名类参数"意味着在这种背景下?

时间:2017-02-17 15:50:08

标签: java android-studio intellij-idea

在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'帮助网站并没有真正帮助:"这是一个局部变量,由方法内的匿名或本地类使用,因此成为匿名类的字段。"这是如何适用的?这是我需要担心的事情吗?

1 个答案:

答案 0 :(得分:5)

着色表示参数或局部变量在外部声明并在匿名类(或本例中为lambda)中使用。为了实现这一点,javac编译器将在匿名类中创建一个合成字段来存储变量。您可以通过检查字节码(View > Show Bytecode)来看到这一点。

这不是值得担心的事情,它不是警告,它只是提供信息的语法着色。它确实意味着变量是隐式或显式最终的,因此不可能在不破坏编译的情况下重新分配它。