假设我有两节课。 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值作为值的地图。
如何在不更改类标题的情况下执行此操作?
答案 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)));
}