0
如何檢查示例代碼中的getQueue()
是否使用反射通用?一種方法是通過參數類型和返回類型,並檢查它們是否是TypeVariable
的實例。我正在尋找更簡單的東西。如何使用反射來識別java方法是否通用?
Class SomeClass {
<V> Queue<V> getQueue();
}
如何檢查示例代碼中的getQueue()
是否使用反射通用?一種方法是通過參數類型和返回類型,並檢查它們是否是TypeVariable
的實例。我正在尋找更簡單的東西。如何使用反射來識別java方法是否通用?
Class SomeClass {
<V> Queue<V> getQueue();
}
你並不需要找到一個方法的參數類型或返回類型,以確定是否有類型的參數,因爲類Method
有一個方法getTypeParameters
返回類型參數的數組。
以下是顯示使用此方法的示例。我還在這裏展示了其他兩種方法的用法,因爲術語令人難以置信地混淆。
public class SomeClass {
<V, U> Queue<V> someMethod(String str, int a, List<U> list) {
return null;
}
public static void main(String[] args) throws Exception {
Method method = SomeClass.class.getDeclaredMethod("someMethod", String.class, int.class, List.class);
TypeVariable<Method>[] typeParameters = method.getTypeParameters();
System.out.println(typeParameters.length); // Prints "2"
System.out.println(typeParameters[0].getName()); // Prints "V"
Class<?>[] parameterTypes = method.getParameterTypes();
System.out.println(Arrays.toString(parameterTypes)); // Prints [class java.lang.String, int, interface java.util.List]
Type[] genericParameterTypes = method.getGenericParameterTypes();
System.out.println(genericParameterTypes[2].getTypeName()); // Prints java.util.List<U>
}
}
非常感謝。這完美的作品:) –
由於類型擦除你不能。並且記住有一個類 - 與C++模板不同 - 所以對於你的反射如何工作? –
我想要獲取類/方法的元數據。我沒有看到類/方法的特定用法。我想刪除只適用於泛型的使用。 –