getConstructor、getDeclaredConstructor区别
getDeclaredConstructor:返回指定参数类型、所有声明的(包括private)构造函数
getConstructor:返回指定参数类型、具有public访问权限的构造函数
1、
/**
* Returns a Constructor object which represents the constructor matching the given parameter types that is declared by the class represented by this Class.
* Class[] null is equivalent to the empty array.
*/
@SuppressWarnings("unchecked")
public Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes)
2、
/**
* Returns a Constructor object which represents the public constructormatching the given parameter types.
* Class[] null is equivalent to the empty array.
*
* Use getDeclaredConstructor if you don't want to search superclasses.
*/
@SuppressWarnings("unchecked")
public Constructor<T> getConstructor(Class<?>... parameterTypes) throws NoSuchMethodException
getDeclaredConstructor:返回指定参数类型、所有声明的(包括private)构造函数
getConstructor:返回指定参数类型、具有public访问权限的构造函数
Class中,有其他类似方法。
反射获取private构造方法
package com.test;
A {
private String str;
public A() { str = "first"; }
private A(String str) { this.str = str; }
public String getStr() { return str; }
}
void main(String[] args) {
Class cls = Class.forName("com.test.A");
Class[] paramsType = { String.class };
Object[] params = { "second" };
Constructor con = cls.getDeclaredConstructor(paramsType);
con.setAccessible(true);
A a = (A)con.newinstanct(params);
a.getStr();// second
}