使用泛型在类中执行相同的泛型类型

时间:2013-07-03 08:02:25

标签: java generics

以下示例来自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>。是否有可能通过泛型来实现这一目标?

3 个答案:

答案 0 :(得分:11)

使用

class Pair<X> {

并将所有Y更改为X

答案 1 :(得分:0)

你有没有考虑过这样的事情?

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

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

}

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

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

答案 2 :(得分:-1)

是。这是仿制药的唯一目的;执行您自己的自定义实现。但是,我建议您使用Java的Map和HashMap,而不是使用自己的泛型进行配对。这样您就可以获得预期的结果和其他附加功能。 请查看以下文档:Java HashMap API

但是,如果您仍然认为您自己的泛型实现对于特定目的来说非常方便,那么您可以按照本教程进行操作:Generic Types (Java Tutorials)