相同类型的通用多参数

时间:2016-04-28 21:02:36

标签: java generics multiparameter

我试图了解泛型。在下面的代码中,getDuplicate()返回类型PlaceHolder<X,X>具有相同的参数X,它编译得很好。但是当我在MyClass<T,T>中使用相同的参数类型时,它表示&#34;类型变量T已经定义了&#34;。有人可以用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> {}

1 个答案:

答案 0 :(得分:3)

不同之处在于X被声明一次,并且在T被宣告两次的情况下使用两次。

在方法中,您可以在修饰符之后但在返回类型之前使用<>声明类型参数。同样,在类和接口中,您可以在类名之后但在任何implements和/或extends子句之前以及类/接口主体之前声明类型参数。

您可以在他们声明的范围内使用这些类型参数。声明返回类型PlaceHolder<X, X>正在使用X两次,但声明类MyText<T, T>正在尝试两次声明T

变量等效类比将声明变量并使用它两次:

int x;
...
x + x

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

int t;
int t;

您只需确认自己何时宣布类型参数以及何时使用现有类型参数。