有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为不同的泛型类提供一个接口

我在Java中使用泛型时遇到了一些问题,因为我不确定我想要实现的东西是否真的存在

我编写了以下类(这里简化了,没有getter/setter):

public class Pair<T>{
  public T firstEntry;
  public T secondEntry;

  public Pair(T p_First, T p_Second) {
      this.m_First = p_First;
      this.m_Second = p_Second;
  }
}

现在我想要的是同一个类,但是第一个条目和第二个条目可能是不同的类型。例如,像这样的课程:

public class PairMultipleType<T, K>{
  public T firstEntry;
  public K secondEntry;

  public Pair(T p_First, K p_Second) {
      this.m_First = p_First;
      this.m_Second = p_Second;
  }
}

但我想使用这样的类:

Pair<Integer> myPair = new Pair<Integer>(a, b); //Creates pair with one type.
Pair<Integer, String> myPair = new Pair<Integer, String>(a, "Hallo Welt"); //Creates pair with two types.

我知道这段代码无论如何都是错误的,因为这些类可能没有相同的名称。但这就是问题的关键:是否有可能编写一个我可以用来实现所需行为的接口?如果可能的话,怎么做


共 (1) 个答案

  1. # 1 楼答案

    不能将Pair变量(或类本身)声明为具有数量可变的类型参数

    但您可以做的是Pair扩展PairMultipleType,但将其唯一的类型参数定义为PairMultipleType的两个参数

    public class Pair<T> extends PairMultipleType<T, T> {
        public Pair(T p_First, T p_Second) {
            super(p_First, p_Second);
        }
    }
    

    这种设计要小心,因为很容易混淆泛型类型参数。但你可以这样做:

    Pair<String> pair = new Pair<String>("one", "two");
    PairMultipleType<String, String> pair2 = new Pair<String>("one", "two");
    PairMultipleType<Integer, String> pair3 = new PairMultipleType<Integer, String>(1, "one");