相同类型的泛型多个参数
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;
您只需要确保知道何时声明类型参数以及何时使用现有类型参数。
我正在尝试了解泛型。在下面的代码中,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;
您只需要确保知道何时声明类型参数以及何时使用现有类型参数。