@FunctionalInterface d'interface de fonction Java8

commentaires FunctionalInterface

/**
 * An informative annotation type used to indicate that an interface
 * type declaration is intended to be a <i>functional interface</i> as
 * defined by the Java Language Specification.

informations d'annotation pour indiquer le type d'interface, la déclaration de type d'interface est une fonction
définie par la spécification du langage Java.

Conceptually, a functional interface has exactly one abstract
 * method.  Since {@linkplain java.lang.reflect.Method#isDefault()
 * default methods} have an implementation, they are not abstract.  If
 * an interface declares an abstract method overriding one of the
 * public methods of {@code java.lang.Object}, that also does
 * <em>not</em> count toward the interface's abstract method count
 * since any implementation of the interface will have an
 * implementation from {@code java.lang.Object} or elsewhere.

Conceptuellement, la fonction seule interface une méthode abstraite. Depuis {@linkplain java.lang.reflect.Method # isDefault ()} a une méthode par défaut mis en œuvre, ils ne sont pas abstraites. Si une interface déclare une méthode abstraite pour couvrir l' une des
méthodes communes de {@code java.lang. Object}, qui est
pas considéré comme une méthode abstraite de compter une interface de mise en œuvre aura une interface
mise en œuvre de {@code java.lang. Object} ou ailleurs.

Note that instances of functional interfaces can be created with
 * lambda expressions, method references, or constructor references.

Des exemples d'interface fonctionnelle par le biais de l'expression lambda, constructeur de référence de fonction pour créer

* <p>If a type is annotated with this annotation type, compilers are
 * required to generate an error message unless:
 *
 * <ul>
 * <li> The type is an interface type and not an annotation type, enum, or class.
 * <li> The annotated type satisfies the requirements of a functional interface.
 * </ul>
 *

Si une déclaration de ce type ajouter un commentaire, à moins que l'interface de deux choses se plaindra de satisfaire
1, ce type de commentaire est l'interface plutôt que le type de type d'énumération ou de classe
2, ce type de déclaration conformément aux exigences des interfaces de fonction

 * <p>However, the compiler will treat any interface meeting the
 * definition of a functional interface as a functional interface
 * regardless of whether or not a {@code FunctionalInterface}
 * annotation is present on the interface declaration.

Cependant, le compilateur d'interface sera conforme à ces fonctions sont définies comme une interface de fonction, si l'interface a commentaires @FunctionalInterface

Quelle est l'interface de la fonction

L'interface dite fonction, bien sûr une interface est d'abord, puis il est à cette interface ne peut avoir qu'une méthode abstraite.

Ce type d'interface est également appelée SAM interfaces, à savoir les interfaces à l'unité Abstract Méthode

caractéristique

Interface et seulement une méthode abstraite
vous permet de définir une méthode statique
permet de définir la méthode par défaut
méthode public dans java.lang.Object permet
l'annotation n'est pas nécessaire, si une « interface de fonction » mise en correspondance d'interface est définie, a fait à toutes les notes aucun effet. De plus , les notes pour mieux permettre au compilateur à vérifier. Si l' écriture n'est pas une interface fonctionnelle, mais il a ajouté @FunctionInterface, le compilateur se plaindra

résumé

1, si une interface possède une méthode abstraite, l'interface est une fonction de l' interface
2, si une déclaration de la @FunctionalInterface d'interface, tel que défini par le compilateur sera fonction d'interface requise de l'interface
3, si seulement une certaine interface méthodes abstraites, nous n'avons pas un seul notes FunctionalInterface instruction à l'interface, le compilateur peut encore voir en fonction de l'interface Interface

Des exemples d'interface fonctionnelle par le biais de l'expression lambda, constructeur de référence de fonction pour créer

exemple

// 正确的函数式接口
@FunctionalInterface
public interface TestInterface {
 
    // 抽象方法
    public void sub();
 
    // java.lang.Object中的public方法
    public boolean equals(Object var1);
 
    // 默认方法
    public default void defaultMethod(){
    
    }
 
    // 静态方法
    public static void staticMethod(){
 
    }
}

// 错误的函数式接口(有多个抽象方法)
@FunctionalInterface
public interface TestInterface2 {

    void add();
    
    void sub();
}

Un exemple simple de
définition d'une interface Bonjour:

@FunctionalInterface
public interface Hello {
    String msg(String info);
}

appel

Hello hello = param -> param + "world!";
System.out.println("test functional:" + hello.msg("hello,"));

exportation

test functional:hello,world!

interface de fonction JDK dans les exemples

java.lang.Runnable,

java.awt.event.ActionListener,

java.util.Comparator,

java.util.concurrent.Callable

interface java.util.function en paquets, comme la consommation, fonction, prédicats, fournisseur comme
référence une analyse approfondie Java 8 FunctionalInterface de (a)

Interface fonctionnelle @FunctionalInterface

Publié 80 articles originaux · louange gagné 140 · vues 640 000 +

Je suppose que tu aimes

Origine blog.csdn.net/linjpg/article/details/104096062
conseillé
Classement