通用对类

新手上路,请多包涵

只是尝试我在过去的试卷中发现的这个问题,以便我可以为即将到来的 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;
   }
}

原文由 John Curtsy 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 292
2 个回答

几乎。我会这样写:

 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 并使 first 和 second final 保持不变。

原文由 Claes Mogren 发布,翻译遵循 CC BY-SA 3.0 许可协议

对 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 类如何支持这些合同。

原文由 simon.watts 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题