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> {

并将所有更改YX.

于 2013-07-03T08:03:17.743 回答
0

你考虑过这样的事情吗?

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

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

}

这样,您就可以保留(可能非常有用的)Pair 类,同时还需要强制执行您的“相似性”约束。

作为编程风格的问题,我会让 Pair(和 LikePair)不可变(最终字段,没有设置器)。实现equals()、hashCode()、toString()等也很好。

于 2013-10-03T17:11:57.537 回答