機能の抽象化:のJavaのジェネリック:機能のような最大値()
public abstract class Function<X, Y> {
abstract Y apply(X x);
}
max
メソッドの実装
public static <V extends Comparable<V>> Function<List<V>, V> max() {
return new Function<List<V>, V>() {
@Override
public V apply(List<V> list) {
return Collections.max(list);
}
};
}
と使用(それがどのように見えるべきか)
Date result = max().apply(datesList);
しかし、私このエラーが発生し、それがなぜ必要なのかわからないObject
incompatible types; inferred type argument(s) java.lang.Object do not conform to bounds of type variable(s) V
found : <V>project.Function<java.util.List<V>,V>
required: java.lang.Object
私は同様のQAを大量に読み込んでいますが、これを修正する方法はありませんでした。おかげさまで
:
それとも、あなたは1行でそれを書きたいならば、あなたは次のことを行うことができ、あなたの
max()
方法がExample
という名前のクラスで定義されていると仮定して:あなたはこれを試みることができますあなたの 'Function'型は、[interface](http://docs.oracle.com/javase/tutorial/java/concepts/interface.html)を使うのに適しています。 – Taymon私はTaymonに同意する、私は抽象クラスの代わりにインターフェイスを作るだろう。 [Google Guava](http://code.google.com/p/guava-libraries/)にはすでに「機能」インターフェースがあり、まったく同じものです。 – Jesper
@Taymon提案をいただきありがとうございますが、実際にはこのクラスではもっと多くのメソッドがあります。例: public関数(関数秒){...} –