Neden aşağıdakiler çalışmıyor?Java 8 Belirli bir türdeki rastgele bir nesnenin örnek yöntemine yöntem başvurusu
import java.util.function.Function;
public class MethodRefTest {
public String passMeAround(String input) {
return input + " been passed to me";
}
public Function<String, String> testReferences() {
final Function<String, String> f1 = MethodRefTest::passMeAround;
return f1;
}
public static void main(String[] args) {
new MethodRefTest()
.testReferences()
.apply("foo");
}
}
Javac söylüyor: Bağlam statik neden
MethodRefTest.java:14: error: invalid method reference
final Function<String, String> f1 = MethodRefTest::passMeAround;
^
non-static method passMeAround(String) cannot be referenced from a static context
1 error
Ben anlamıyorum. this'u okudum, ancak eldeki problemi cevaplamıyor gibi görünüyor.
DÜZENLEME
da oracle göre, "özel bir tip rasgele bir nesnenin bir örnek yöntemi referans" ContainingType::methodName
DÜZENLEME 2
marko-Topolnik @ yardımcı ile mümkündür Benim hatamı burada anlıyorum. Function<String, String> f1 = MethodRefTest::passMeAround;
bu uygulama madde geçirilen, any instance
örneği yönteme değinmektedir, statik bir yöntem ise String MethodRefTest.passMeAround(String)
BiFunction<MethodRefTest, String, String> f1 = MethodRefTest::passMeAround;
belirtmektedir.
BiFunction<MethodRefTest, String, String> f2 = MethodRefTest::passMeAround;
//call instance method
f2.apply(new MethodRefTest(), "some string");
@ AlexandroSifuentesDíaz saatini öğrenmek için Java 8. Şu anda oldukça uzun bir süredir. –
hatalı hata mesajı. – ZhongYu
Ama @ BrianGoetz, 'class :: method' (ve OP'nin durumunda _does_) bir örnek yöntem referansına gider. Hata iletisi yanıltıcıdır, çünkü asıl sorun hedef tipi ile örnek yöntem referansının türü arasındaki uyumsuzluktur. –