泛型对类

2022-09-03 03:22:59

只是尝试这个问题,我在过去的试卷中找到了这个问题,这样我就可以为即将到来的Java考试做准备。

提供一个泛型类 Pair 来表示事物对。该类应提供一个构造函数,一个用于获取对的第一个成员的方法,一个用于获取对的第二个成员的方法,一个用于设置对的第一个成员的方法,一个用于设置对的第二个成员的方法。该类应该在两个类型上进行参数化,一个用于第一个成员,另一个用于对的第二个成员。

这是这个问题的正确实现吗?

public class Pair<firstThing, secondThing>{
   private firstThing first;//first member of pair
   private secondThing second;//second member of pair

   public Pair(firstThing first, secondThing second){
     this.first = first;
     this.second = second;
   }

   public void setFirst(firstThing first){
    this.first = first;
   }

   public void setSecond(secondThing second) {
     this.second = second;
   }

   public thing getFirst() {
     return this.first;
   }

   public thing getSecond() {
     return this.second;
   }
}

答案 1

几乎。我会这样写:

public class Pair<F, S> {
    private F first; //first member of pair
    private S second; //second member of pair

    public Pair(F first, S second) {
        this.first = first;
        this.second = second;
    }

    public void setFirst(F first) {
        this.first = first;
    }

    public void setSecond(S second) {
        this.second = second;
    }

    public F getFirst() {
        return first;
    }

    public S getSecond() {
        return second;
    }
}

编辑:我同意@karmakaze的评论。代码应跳过 setter,使第一个和第二个结尾,以保持其不可变。


答案 2

对 Pair 类的需求通常在较大的项目中出现 - 我即将(重新)为当前项目实现一个类(因为以前的实现无法访问)。

通常,我将其设置为不可变的POJO,并具有创建实例的便利功能。例如:

public class Pair<T,U>
{
    public final T first;
    public final U second;
    public static <T,U> Pair<T,U> of(T first, U second);
}

以便最终用户可以编写:

return Pair.of (a, b);

Pair<A,B> p = someThing ();
doSomething (p.first);
doSomethingElse (p.second);

如上所述,Pair 类还应该实现 hashCode()、equals()、可选但有用的 toString(),作为 clone() 和 compareTo() 的可能,以便在 T 和 U 支持这些协定的情况下使用 - 尽管需要额外的工作来描述 Pair 类如何支持这些协定。


推荐