これは例えば、このタイプの使用とは異なること
public static <T> void f(){}
class A<T> {}
interface I<T> {}
class B {
<T>B() {
}
}
注、次のコードで、すなわちT
、メソッド、コンストラクタ、または型宣言の型変数を表しますInteger
は、次のコードスニペットで型変数ではありません。
List<Integer> list = Arrays.<Integer>asList(null);
型変数の使用このによって表されていません。
public static <T> void h(T t) {}
^
Not a TypeVariable
ここでは、標準APIのクラスの用途のリストです: ParametrizedType
からhttps://docs.oracle.com/javase/8/docs/api/java/lang/reflect/class-use/TypeVariable.html
差:
TypeVariable
は型変数の宣言を指し、ParametrizedType
はそのような型の使用です。
例:
public class ReflectTest {
public Collection<String> c;
public static void main(String[] args) throws NoSuchFieldException {
System.out.println(Collection.class.getTypeParameters()[0]); // E
System.out.println(Collection.class.getTypeParameters()[0] instanceof TypeVariable); // true
System.out.println(Collection.class.getTypeParameters()[0] instanceof ParameterizedType); // false
Field field = ReflectTest.class.getField("c");
System.out.println(field.getGenericType()); // java.util.Collection<java.lang.String>
System.out.println(field.getGenericType() instanceof TypeVariable); // false
System.out.println(field.getGenericType() instanceof ParameterizedType); // true
}
}
しかし、あなたの例では 'T'は 'ParameterizedType'であることを表す別のインターフェイスを持っていませんか? – NinjaBoy2014
私が理解していることは、 'TypeVariable'は型パラメータの抽象定義を表し、' ParameterizedType'は型パラメータの宣言と使用を表しますか? – NinjaBoy2014
@ NinjaBoy2014: 'TypeVariable'は型パラメータの宣言であり、' ParametrizedType'は 'TypeVariable'型の型の使用です。 – fabian