Java 在不更改类标题的情况下使用泛型

Java 在不更改类标题的情况下使用泛型,java,class,generics,Java,Class,Generics,假设我有两门课配对: public class Pair<X, Y> { public X x; public Y y; public Pair(X x , Y y) { this.x = x; this.y = y; } } 我想创建一个类Test,而不更改类头(不能执行Test): 在这个类中应该有一个方法,它接受一个三元组的列表,并且应该返回一个映射,其中三元组的x值作为键,三元组的y和z值作为映射的值 如何在不更改类标题的情况下执行此操作?您可以这

假设我有两门课<代码>配对:

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

  public Pair(X x , Y y) {
   this.x = x;
   this.y = y;
  }
}
我想创建一个类
Test
,而不更改类头(不能执行
Test
):

在这个类中应该有一个方法,它接受一个
三元组的列表
,并且应该返回一个映射,其中三元组的x值作为键,三元组的y和z值作为映射的值


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

您可以这样做。您需要使方法泛型,而不是它所在的类

class Test {

    static <X, Y, Z> Map<X, Pair<Y, Z>> makeMap(List<Triple<X, Y, Z>> triples) {        
        // your implementation
    }
}
类测试{
静态映射makeMap(列表三元组){
//您的实现
}
}

方法可以是
静态
或非
静态
。在任何一种情况下,通用参数都会紧跟在返回类型之前。

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

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)));
}
公共静态映射makeMap(列表参数){
返回arg.stream().collect(Collectors.toMap(e->e.x,e->newpair(e.y,e.z));
}

听起来您只需要一个通用方法:
公共静态映射转换(列表){…
谢谢!这个方法需要是静态的还是你为什么选择它是静态的?我不知道为什么我把它设为静态的。一般来说,最好避免使用静态方法,因为它们会使测试更困难。谢谢!这个方法需要是静态的还是你为什么选择它是静态的?它不需要是静态的。但是没有理由这样做不应该是静态的。
class Test {

    static <X, Y, Z> Map<X, Pair<Y, Z>> makeMap(List<Triple<X, Y, Z>> triples) {        
        // your implementation
    }
}
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)));
}