tipo genérico de instancias y Lambdas

Nadia Rodriguez :

Estoy trabajando con funciones anónimas e interfaces funcionales, tengo una interfaz funcional que toma dos objetos del mismo tipo y devuelve verdadero o falso.

package elementutils;
@FunctionalInterface
public interface TwoElementPredicate <T> {
    public boolean compare(T a, T b);
    }

Yo uso la interfaz funcional en otra clase para obtener la "mejor elemento de" usar funciones anónimas, el betterElement método toma dos objetos y la instancia de la interfaz funcional. Entonces debería ser capaz de crear lambdas para comparar dos objetos del mismo tipo en el principal.

package elementutils;

public class ElementUtils <T> {
    public  T  betterElement(T a, T b, TwoElementPredicate elements){
    if (elements.compare(a, b) == true) {
        return a;
    }else {
        return b;
    }
    }
    public static void main(String[] args) {
        //String x= ElementUtils.betterElement("java", "python", (a, b) -> a.length() < b.length());
        //int y= ElementUtils.betterElement(2, 3, (a, b) -> a > b);
        //double z= ElementUtils.betterElement(2.5, 3.7, (a, b) -> a > b);
        // all this give errors

    }

}

Las funciones deben tomar cualquier objeto, siempre y cuando sean del mismo tipo. Pensé que podía lograr que el uso de las clases genéricas pero cuando una instancia de la lambdas parece que los elementos son siempre del tipo de objeto, así que no puedo usar longitud () y no puedo cedida a una cadena, por ejemplo.

Espero haberme explicado correctamente, cualquier ayuda será apreciada altamente.

user7:

Se echa en falta el parámetro de tipo Ten TwoElementPredicatey por lo tanto está utilizando un tipo de prima

Es necesario declarar el parámetro elementsa partir del tipo deTwoElementPredicate<T>

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=201599&siteId=1
Recomendado
Clasificación