私はJavaの開発に遅れをとっており、Javaでインタフェース実装の導出があったのかどうか疑問に思っていました。私の好みのプログラミング言語はHaskellです。これはJavaに対して多くの点で相反していますが、Javaのようなものがあるかどうか疑問に思っていた機能の1つは、複合型のインタフェース実装をパラメータのインタフェース実装から派生させることです。例えば、Haskellで:Javaでのインタフェースの導出
data Pair k v = Pair k v
instance (Ord k) => Ord (Pair k v) where
compare (Pair x _) (Pair x' _) = compare x x'
これは、その最初のパラメータが明示的にケースのようにそれを必要とせずに、注文することができる場合は、Pair
を注文することができます。しかし、私はJavaでこれに来ることができる最も近いが、明示的な要件によって次のとおりです。私はすべてのペアことを確認せずにペアのBSTを実装するために推論する比較可能性を残す方法がなければ
class Pair<K extends Comparable<K>, V> extends Comparable<Pair<K,V>> {
K k;
V v;
public int compareTo(Pair<K,V> p) {
return k.compareTo(p.k);
}
}
、それは不可能です最初の要素がComparableであることが明示的に要求されていないMapは実装できません。これを回避する方法はありますか?BSTクラスのメソッドを作成して、ジェネリック型を比較可能なものとして最初にキャストし、次に比較可能なキーを持つペアとして比較可能であるときはいつでも比較しようとする方法以外はありますか?
同じ質問? http://stackoverflow.com/questions/32789437/constrained-interface-implementationこれに私をリンクするための – ZhongYu
感謝。このような観察は、JavaにいくつかのFP経験を持って来る人々の間で一般的であるようです。 – archaephyrryx