2010-10-11 13 views
10

necesito una interfaz como:Java: X- función general> Interfaz Y

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

¿Hay algo como esto en Java ya o tengo que definir mi propia?

+1

posible duplicado de [Java: ¿existe una función de mapa? ] (http://stackoverflow.com/questions/3907394/java-is-there-a-map-function) – Riduidel

+2

@Riduidel: ¿Cómo es la misma pregunta? Es una pregunta completamente diferente. – Albert

+0

Esta es quizás la supervisión más evidente cuando se generó Java. –

Respuesta

2

Hay una interfaz integrada así, aunque solo es compatible con Java 8 onw ards. Lo puedes encontrar here.

De los Javadocs:

public interface Function<T,R>

representa una función que acepta un argumento y produce un resultado.

Esta es una interfaz funcional cuyo método funcional es apply(Object).

Parámetros Tipo:
T - el tipo de la entrada a la función
R - el tipo del resultado de la función

13

Salida guayaba, tiene una 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

De hecho, teniendo en cuenta que su finalidad es la suya, y no Sun/Oracle uno, debe definir su propia interfaz (como lo define el contrato quieres que los implementadores de tu interfaz se llenen por completo).

Sin embargo, si ya existe algún marco con dicha interfaz, y su propósito es el mismo que el suyo, podría usar su definición, pero con la mayor precaución.

5

Desafortunadamente, no existe tal cosa en las bibliotecas centrales de Java. Como consecuencia, muchas bibliotecas definen su propia interfaz funcional. Si ya usa esa biblioteca, puede volver a utilizar la función que utiliza.

+0

Sé que la respuesta es anterior. Pero a partir de Java 8+, esto es posible. https://www.leveluplunch.com/java/examples/java-util-function-function-example/ – Eternalcode

2

Se puede utilizar una biblioteca como Apache Commons Functor que tiene funciones útiles, tales como:

UnaryFunction

T evaluate(A obj); 

BinaryFunction

T evaluate(L left, R right);