Dieses Mal studieren wir die Methodenreferenz. Es scheint, dass Sie einer IF-Variablen vom Funktionstyp eine Methode zuweisen können. Ich denke, es ist ein Bild, in dem Sie aufgefordert werden, diese (angegebene) Zuweisungsmethode auszuführen, wenn die (einzige) abstrakte Methode des Funktionstyps IF aufgerufen wird. Für diejenigen, die die funktionale IF vergessen haben siehe vorherigen Artikel
Bereiten Sie vorerst zwei funktionale IFs vor, wie unten gezeigt.
@FunctionalInterface
public interface SampleFunctionalIF {
String methodA();
}
@FunctionalInterface
public interface SampleFunctionalIF2 {
String methodA(String A, String B);
}
Also, hier ist eine Klasse, die diese nennt
/**
*Referenz der Studienmethode.
*Methoden können funktionalen IF-Variablen zugeordnet werden.
*Funktionsart IF(Ich denke, es ist ein Bild, in dem Sie aufgefordert werden, diese (angegebene) Zuweisungsmethode auszuführen, wenn die (einzige) abstrakte Methode aufgerufen wird.
* @author komikcomik
*
*/
public class MethodRef {
public static void main(String[] args) {
/*Ohne Argumente*/
//Ein Bild, das Sie auffordert, stattdessen die Methode Hallo dieser Klasse auszuführen, wenn MethodeA aufgerufen wird, die eine abstrakte IF von SampleFunctionalIF ist.
System.out.println("-----Beispiel 1-----");
SampleFunctionalIF if1 = MethodRef::hello;
System.out.println(if1.methodA());
/*Mit einem Argument*/
//Dieser Bereich ist in der Liste nur angemessen bewertet
System.out.println("-----Beispiel 2-----");
List<String> l = new ArrayList<>();
l.add("hoge");
l.add("hogehoge");
l.forEach(System.out::println); //Systemimplementierung der abstrakten Methode von List, die funktionale IF ist.out.println(s)Bild angegeben als
l.forEach(MethodRef::echo); //Es ist ähnlich wie oben, aber Sie können natürlich Ihre eigene Methode ersetzen
/*Mit 2 Argumenten*/
System.out.println("-----Beispiel 3-----");
SampleFunctionalIF2 if2 = MethodRef::join;
System.out.println(if2.methodA("Hello", "World"));
}
public static String hello() {
System.out.println("Die Hallo-Methode wurde aufgerufen");
return "hello";
}
public static String join(String A, String B) {
return A + B;
}
public static void echo(String s) {
System.out.println(s);
}
}
Das Ausführungsergebnis ist wie folgt.
-----Beispiel 1-----
Die Hallo-Methode wurde aufgerufen
hello
-----Beispiel 2-----
hoge
hogehoge
hoge
hogehoge
-----Beispiel 3-----
HelloWorld
Gut wie erwartet. Ich bin es jedoch nicht gewohnt, im Lambda-Stil zu schreiben oder wie :: diesmal zu schreiben, also mache ich mich irgendwie fertig ... Der Lambda-Ausdruck wird als Argument-> Verarbeitung </ b> geschrieben, und wenn Sie das Äquivalent dieses Beispiels 2 in den Lambda-Ausdruck schreiben
l.forEach(s -> {
System.out.println(s);
});
Es scheint also, dass ein ähnlicher Effekt erzielt werden kann. Wie verwenden Menschen, die es richtig benutzen, es richtig?
Recommended Posts