看getDeclaredConstructors()
是如何定義的:
public Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes)
的Class<?>...
符號意味着該方法是variadic。它採用Class對象作爲參數列表,有兩種方式來提供名單:
可以列出的對象作爲單獨的參數:
Constructor<?> ctor = getDeclaredConstructor(String.class, String.class, Integer.class, etc)
您可以構建一個數組,該陣列通過作爲單個參數
Class<?>[] classes = new Class<?>[3];
classes[0] = String.class;
...
Constructor<?> ctor = getDeclaredConstructor(classes);
爲了找到一個構造不知道AHEA時間d有多少個參數或者它們的類型是多少,您可以使用第二種方法 - 構建一個描述您正在查找的參數列表的數組,然後以該數組作爲參數調用getDeclaredConstructor()
。例如:
static <T> T construct(Class<T> aClass, Object...args)
throws NoSuchMethodException, SecurityException,
InstantiationException, IllegalAccessException,
IllegalArgumentException, InvocationTargetException {
Class<?>[] classes = new Class<?>[args.length];
for (int ii = 0; ii < args.length; ++ii) {
classes[ii] = args[ii].getClass();
}
Constructor<T> ctor = aClass.getDeclaredConstructor(classes);
return ctor.newInstance(args);
}
...
String abc = construct(String.class, "abc");
URL google = construct(URL.class, "http", "google.com", "/");
如果您不知道要查找的構造函數的參數,可以遍歷'tempClass.getDeclaredConstructors()'。 –
你能舉一個例子說明你的意思是「tempClass是動態的」嗎? – EJK