В Haskell (и Rust и другие) у меня могут быть экземпляры, которые ограничены другими экземплярами:
data Pair a b = Pair a b
instance (Eq a, Eq b) => Eq (Pair a b) where
Pair a b == Pair a' b' = a == a' && b == b'
С интерфейсами Java я не могу. Я должен потребовать, чтобы параметры типа Pair
всегда реализовывали Eq
, или я вообще не могу реализовать Eq<Pair<A, B>>
:
interface Eq<A> {
public boolean eq(A other);
}
class Pair<A extends Eq<A>, B extends Eq<B>> implements Eq<Pair<A, B>> {
A a;
B b;
public boolean eq(Pair<A, B> other){
return a.eq(other.a) && b.eq(other.b);
}
}
Я хотел бы иметь что-то вроде:
class Pair<A, B> implements Eq<Pair<A, B>> if (A implements Eq<A> && B implements Eq<B>) {...}
До сих пор Интернет сказал мне, что моя желаемая функциональность напрямую не поддерживается на Java. Тем не менее, я считаю это довольно важным фактором в (re) удобстве использования интерфейсов. Я хотел бы знать, есть ли обходные пути или решения, которые примерно охватывают одно и то же основание.