あなたと,合体したい

class Human<Sex, ComplementarySex>
{
    ComplementarySex spouse;
    void marryTo(ComplementarySex spouse) { this.spouse = spouse; }
}

class Man extends Human<Man, Woman> {}
class Woman extends Human<Woman, Man> {}

なんだ,結局一緒じゃないか.

class MSM extends Human<MSM, MSM> {}
class WSW extends Human<WSW, WSW> {}

なんてのもあるから仕方ないのかもしれないけどさ,


javaは型とインターフェイスの区別がないんだよなぁ
だから,型の演算がextendsしかないっていう.A→Bだけやん.

interface IntersectTuple<T1, T2>
{
    T2 getComplementary(T1 v1);
    T1 getComplementary(T2 v2);    
}

interface Male;
interface Female;
interface Sex extends IntersectTuple<Male, Female>;

うむむむむ…