tipo genérico instanciação e Lambdas

Nadia Rodriguez:

Eu estou trabalhando com funções anônimas e interfaces funcionais, tenho uma interface funcional que toma dois objetos de mesmo tipo e retorna verdadeiro ou falso.

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

Eu uso a interface funcional em outra classe para obter o "melhor elemento" usando funções anônimas, o método betterElement toma dois objetos e a instância da interface funcional. Então eu deveria ser capaz de criar lambdas para comparar dois objetos do mesmo tipo no 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

    }

}

As funções devem tomar qualquer objeto, desde que eles são do mesmo tipo. Eu pensei que eu poderia conseguir isso usando classes genéricas, mas quando eu instanciar os lambdas parece que os elementos são sempre de tipo de objeto, então não posso usar comprimento () e não pode assigne-los para uma String por exemplo.

Espero que eu expliquei-me corretamente, qualquer ajuda será muito apreciada.

user7:

Está faltando o parâmetro de tipo Tna TwoElementPredicatee, portanto, você está usando um tipo de matéria

Você precisa declarar o parâmetro elementscomo do tipoTwoElementPredicate<T>

Acho que você gosta

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