使用泛型而不更改类标题

时间:2018-03-30 13:06:11

标签: java class generics

假设我有两节课。 Pair

public class Pair<X, Y> {
 public X x;
 public Y y;

  public Pair(X x , Y y) {
   this.x = x;
   this.y = y;
  }
}

和班级Triple

public class Triple<X, Y, Z> {
 public X x;
 public Y y;
 public Z z;

 public Triple(X x , Y y, Z z) {
  this.x = x;
  this.y = y;
  this.z = z;
 }
}

我想在不更改类标题的情况下创建一个类Test(不能Test<X, Y, Z>):

public class Test {
  ...
}

在这个类中应该是一个方法,它采用Triples的列表,并且应该返回一个Map,其中三元组的x值作为键,三元组的y和z值作为值的地图。

如何在不更改类标题的情况下执行此操作?

2 个答案:

答案 0 :(得分:2)

你可以做到。你需要使方法通用而不是它所在的类。

class Test {

    static <X, Y, Z> Map<X, Pair<Y, Z>> makeMap(List<Triple<X, Y, Z>> triples) {        
        // your implementation
    }
}

该方法可以是static或非static。在任何一种情况下,通用参数<X, Y, Z>都会出现在返回类型之前。

答案 1 :(得分:1)

根据您的描述,这里有一个实现:

public static <X, Y, Z> Map<X, Pair<Y, Z>> makeMap(List<Triple<X, Y, Z>> arg) {
    return arg.stream().collect(Collectors.toMap(e -> e.x, e -> new Pair<>(e.y, e.z)));
}