0

パラメータとしてs または型の@FunctionalInterface両方を受け入れる Java でを作成したいと考えています。私はこれをやろうとしましたが、共通のインターフェースを共有していないため、達成することは不可能のようです. また、を呼び出す一般的なラッパー クラスを使用してみましたが、実行時に型パラメーターが必要なため、これは不可能のようです。StreamOptional@FunctionalInterface

最小の例:

@FunctionalInterface
public interface AcceptingInterface<S, T> {

    T accept(S s);

}

public class Test<S, T> {

    private final AcceptingInterface<S, T> funcInterface;

    private final Class<S> source;

    private final Class<T> target;

    public Test(AcceptingInterface<S, T> a, Class<S> s, Class<T> t) {
        this.funcInterface = a;
        this.source = s;
        this.target = t;
    }

    public T invoke(S s) {
        return s == null ? null : this.funcInterface.accept(s);
    }

    public Class<S> getSource() {
        return source;
    }

    public Class<T> getTarget() {
        return target;
    }
}

私のアプローチが間違っているのかもしれません...フィードバックやこの問題の解決策をお待ちしております。

4

1 に答える 1

4

Optional を 0-1 要素の Stream として扱いたいと仮定します。その場合、Optional から Stream に変換するデフォルトのメソッドを追加できます。

@FunctionalInterface
public interface AcceptingInterface<V, T> {

    T accept(Stream<? extends V> s); 
    default T accept(Optional<? extends V> opt){
        return accept(opt.map(Stream::of).orElseGet(Stream::empty)); 
    }

}

Java 9 はOptional.stream()メソッドを追加することになっています。

于 2016-07-01T10:04:19.057 に答える