0

次の例はGenericsFAQからの抜粋です。

class Pair<X,Y>  { 
    private X first;
    private Y second;

    public Pair(X a1, Y a2) {
      first  = a1;
      second = a2;
    }
    public X getFirst()  { return first; }
    public Y getSecond() { return second; }
    public void setFirst(X arg)  { first = arg; }
    public void setSecond(Y arg) { second = arg; }
}

X質問: 強制したかったYのですが、同じタイプである必要があります。例Pair<Integer,Integer>は正しいですが、Pair<Integer, String>受け入れるべきではありません。ジェネリックを通じてこれを達成することは可能ですか?

4

2 に答える 2

11

使用する

class Pair<X> {

すべてYを に変更しXます。

于 2013-07-03T08:03:17.743 に答える
0

このようなことを検討しましたか?

class LikePair<Z> extends Pair<Z,Z> {

    public LikePair(Z a, Z b) {
        super(a, b);
    }

}

そうすれば、(潜在的に非常に便利な)ペアクラスを維持しながら、必要な「類似性」の制約も適用できます。

プログラミング スタイルの問題として、Pair (および LikePair) を不変 (最終フィールド、セッターなし) にします。equals()、hashCode()、toString() などを実装するとよいでしょう。

于 2013-10-03T17:11:57.537 に答える