2010-10-11 7 views
10

je besoin d'une interface comme:Java: Fonction générale X-> Interface Y

interface Function<X,Y> { 
    Y eval(X obj); 
} 

Y at-il quelque chose comme ça en Java déjà ou ai-je besoin de définir ma propre?

+1

en double possible de [Java: est-il une fonction de carte? ] (http://stackoverflow.com/questions/3907394/java-is-there-a-map-function) – Riduidel

+2

@Riduidel: Comment est-ce la même question? C'est une question complètement différente. – Albert

+0

C'est peut-être l'oubli le plus flagrant quand Java a été généré. –

Répondre

2

Il est intégré dans l'interface comme ceci, bien qu'il ne soit compatible qu'avec Java 8 ards. Vous pouvez le trouver here.

Des Javadocs:

public interface Function<T,R>

Représente une fonction qui accepte un argument et produit un résultat.

Il s'agit d'une interface fonctionnelle dont la méthode fonctionnelle est apply(Object).

Paramètres Type:
T - le type de l'entrée à la fonction
R - le type du résultat de la fonction

13

Check out goyave, il a un Function interface:

public interface Function<F, T> { 
    /** 
    * Applies the function to an object of type {@code F}, resulting in an object of  type {@code T}. 
    * Note that types {@code F} and {@code T} may or may not be the same. 
    * 
    * @param from the source object 
    * @return the resulting object 
    */ 
    T apply(@Nullable F from); 

    /** 
    * Indicates whether some other object is equal to this {@code Function}. This  method can return 
    * {@code true} <i>only</i> if the specified object is also a {@code Function} and, for every 
    * input object {@code o}, it returns exactly the same value. Thus, {@code 
    * function1.equals(function2)} implies that either {@code function1.apply(o)} and {@code 
    * function2.apply(o)} are both null, or {@code function1.apply(o).equals(function2.apply(o))}. 
    * 
    * <p>Note that it is always safe <i>not</i> to override {@link Object#equals}. 
    */ 
    boolean equals(@Nullable Object obj); 
} 
0

En fait, compte tenu de votre objectif est la vôtre, et non un Sun/Oracle, vous doit définir votre propre interface (comme il définit le contrat vous voulez que les implémenteurs de votre interface soient fullfil). Toutefois, si un cadre existe déjà avec une telle interface et que son but est le même que le vôtre, vous pouvez utiliser sa définition, mais avec la plus grande prudence.

5

Malheureusement, il n'y a rien de tel dans les bibliothèques Java de base. En conséquence, de nombreuses bibliothèques définissent leur propre interface de type fonction. Si vous utilisez déjà une telle bibliothèque, vous pouvez réutiliser la fonction qu'elle utilise.

+0

Je sais que la réponse est ancienne. Mais à partir de Java 8+, c'est possible. https://www.leveluplunch.com/java/examples/java-util-function-function-example/ – Eternalcode

2

Vous pouvez utiliser une bibliothèque telle que Apache Commons Functor qui a des fonctions utiles telles que:

UnaryFunction

T evaluate(A obj); 

BinaryFunction

T evaluate(L left, R right);