ラムダからメソッド参照へリファクタリングしようとしましたメソッドリファレンスが呼び出し元のローカル変数を取得しないという違いがあるようですレキシカルスコープ?)。インラインコードとしてラムダを使用する場合、まったく問題はありません。 Javaラムダとメソッドリファレンス - 1つは呼び出し元のローカル変数を受け取りません
public class MethodRef {
public static void main(String[] args) {
String appender = "I am appended";
//possible
appender("Hello! ", former -> {
StringBuilder builder = new StringBuilder(former);
builder.append(appender);
System.out.println(builder.toString());
});
//not possible
appender("Hello! ", this::theRef);
}
//Delegater
public static void appender(String former, Consumer<String> consumer){
consumer.accept(former);
}
//Method Ref
public void theRef(String former){
StringBuilder builder = new StringBuilder(former);
builder.append(appender);
System.out.println(builder.toString());
}
}
は、私は方法ののparamリストは、任意の「アペンダ」を得ていないが、私は、発信者/消費者の範囲の字句VARSにアクセスするために使用することができます「隠された」paramは存在しないという事実を理解できますか?
静的コンテキストからメンバーメソッドにアクセスしようとしています。 'theRef'メソッドのシグネチャを' public static void theRef(String former) 'に変更し、' this :: theRef'の代わりに 'MethodRef :: theRef'を使用してみてください。 Oracleのマニュアルの[静的メソッドのリファレンス](https://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html)を参照してください。 – Jezor