Cette fois, nous étudions la référence de méthode. Il semble que vous puissiez affecter une méthode à une variable IF de type fonction. Je pense que c'est une image de vous dire d'exécuter cette méthode d'affectation (spécifiée) lorsque la (seule) méthode abstraite du type de fonction IF est appelée. Pour ceux qui ont oublié le SI fonctionnel voir l'article précédent
Pour le moment, préparez deux FI fonctionnels comme indiqué ci-dessous.
@FunctionalInterface
public interface SampleFunctionalIF {
String methodA();
}
@FunctionalInterface
public interface SampleFunctionalIF2 {
String methodA(String A, String B);
}
Alors, voici une classe qui les appelle
/**
*Référence de la méthode d'étude.
*Les méthodes peuvent être affectées à des variables IF fonctionnelles.
*Type de fonction IF(Je pense que c'est une image de vous dire d'exécuter cette méthode d'affectation (spécifiée) lorsque la (seule) méthode abstraite est appelée.
* @author komikcomik
*
*/
public class MethodRef {
public static void main(String[] args) {
/*Sans arguments*/
//Une image qui vous demande d'exécuter la méthode hello de cette classe à la place lorsque methodA, qui est un IF abstrait de SampleFunctionalIF, est appelée.
System.out.println("-----Exemple 1-----");
SampleFunctionalIF if1 = MethodRef::hello;
System.out.println(if1.methodA());
/*Avec un seul argument*/
//Cette zone a juste un prix approprié dans la liste
System.out.println("-----Exemple 2-----");
List<String> l = new ArrayList<>();
l.add("hoge");
l.add("hogehoge");
l.forEach(System.out::println); //Implémentation système de la méthode abstraite de List qui est IF fonctionnelle.out.println(s)Image spécifiée comme
l.forEach(MethodRef::echo); //C'est similaire à celui ci-dessus, mais vous pouvez bien sûr remplacer votre propre méthode
/*Avec 2 arguments*/
System.out.println("-----Exemple 3-----");
SampleFunctionalIF2 if2 = MethodRef::join;
System.out.println(if2.methodA("Hello", "World"));
}
public static String hello() {
System.out.println("La méthode hello a été appelée");
return "hello";
}
public static String join(String A, String B) {
return A + B;
}
public static void echo(String s) {
System.out.println(s);
}
}
Le résultat de l'exécution est le suivant.
-----Exemple 1-----
La méthode hello a été appelée
hello
-----Exemple 2-----
hoge
hogehoge
hoge
hogehoge
-----Exemple 3-----
HelloWorld
Eh bien comme prévu. Cependant, je n'ai pas l'habitude d'écrire en style lambda ou d'écrire comme :: cette fois, donc je me prépare en quelque sorte ... L'expression lambda est écrite comme argument-> processing </ b>, et si vous écrivez l'équivalent de cet exemple 2 dans l'expression lambda
l.forEach(s -> {
System.out.println(s);
});
Il semble donc qu'un effet similaire puisse être obtenu. Comment les gens qui l'utilisent correctement l'utilisent-ils correctement?
Recommended Posts