ジェネリック型のインスタンス化とラムダ

ナディア・ロドリゲス:

私は無名関数や機能のインターフェイスで働いて、私は、同じタイプの2つのオブジェクトを取り、trueまたはfalseを返し一つの機能のインタフェースを持っています。

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

私は無名関数を使用して「より良い要素」、betterElement 2つのオブジェクトと機能のインターフェースのインスタンスを取得するメソッドを取得するには、別のクラスの機能インタフェースを使用しています。それから私は、メインの同じタイプの2つのオブジェクトを比較するためにラムダを作成することができるはずです。

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

    }

}

機能は、限り、彼らは同じ型からのものとして任意のオブジェクトを取る必要があります。私は、ジェネリッククラスを使用していることを達成できると思っていたが、私はラムダをインスタンス化するとき、私が(長さを使用することはできません)例えばStringにそれらをassigneすることはできませんので、要素が常に型オブジェクトのあると思われます。

私は自分が正しく、すべてのヘルプは高く評価されます説明願っています。

user7:

あなたは、typeパラメータが欠落しているTTwoElementPredicate、したがって、あなたが使用している生のタイプを

あなたは、パラメータを宣言する必要があるelementsタイプのようTwoElementPredicate<T>

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=201596&siteId=1