相同类型的泛型多个参数

Generic multiple parameter of same type

我正在尝试了解泛型。在下面的代码中,getDuplicate() return 类型 PlaceHolder<X,X> 具有相同的参数 X,可以正常编译。但是当我在 MyClass<T,T> 中使用相同的参数类型时,它显示 "type variable T already defined"。有人可以解释一下如何使用 getDuplicate 方法吗?

class PlaceHolder<K,V> {
   public K k;
   public K v;

   public PlaceHolder(K k, K v){
       this.k = k;
       this.v = v;
   }

   public K get(){ return k;    }

   public static <X> PlaceHolder<X,X> getDuplicateHolder(X x){
        return new PlaceHolder<X,X>(x,x);
   }

}

class MyTest<T,T> {}

不同之处在于 X 声明一次并使用两次,而 T 声明两次。

在方法中,您可以在修饰符之后但在 return 类型之前使用 <> 声明类型参数。同样,在 classes 和接口中,您可以在 class 名称之后但在任何 implements and/or extends 子句之前和 [=34 之前声明类型参数=]正文。

您可以在声明它们的范围内使用这些类型参数。声明 return 类型的 PlaceHolder<X, X> 是使用 X 两次,但声明 class MyText<T, T> 是试图声明 T 两次。

变量等效类比是声明一个变量并使用它两次:

int x;
...
x + x

对比试图声明两个具有相同名称的变量。

int t;
int t;

您只需要确保知道何时声明类型参数以及何时使用现有类型参数。