package reflection;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.HashSet;
import java.util.Set;
public class NewReflectTest {
/**
* @param args
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
CompanyEmployer companyEmployer = new CompanyEmployer();
companyEmployer.setAge(new Long(33));
Set<CompanyEmployer> companyEmployers = new HashSet<CompanyEmployer>();
companyEmployers.add(companyEmployer);
Company c = new Company();
c.setCompanyEmployers(companyEmployers);
companyEmployer.setCompany(c);
if (c instanceof CompanyInterface) {
Employer employer = c.returnClass();
System.out.println("Employer:" + employer.getAge());
} else {
throw new Exception("");
}
StringBuffer sb = new StringBuffer();
String className = "reflection.Company";
Class<?> cls = Class.forName(className);
// 包名
sb.append(cls.getPackage()).append(";").append("\n");
// 类信息
sb.append(Modifier.toString(cls.getModifiers())).append(" ")
.append("Class").append(" ").append(cls.getSimpleName())
.append(" ").append("{").append("\n").append("\n");
// 属性信息
String fieldStr = printField(cls);
// 构造函数
String constructorStr = printConstructor(cls);
// 方法
String methodStr = printMethod(cls);
sb.append(fieldStr);
sb.append(constructorStr);
sb.append(methodStr);
System.out.println(sb.toString());
}
/**
* 属性信息
*
* @param cls
* @return
*/
public static String printField(Class<?> cls) {
StringBuffer sb = new StringBuffer();
// 属性信息
Field[] fields = cls.getDeclaredFields();
for (Field field : fields) {
// 域信息
sb.append(Modifier.toString(field.getModifiers())).append(" ")
.append(field.getType().getName()).append(" ")
.append(field.getName()).append(";").append("\n");
}
sb.append("\n");
return sb.toString();
}
/**
* 反射构造函数
*
* @param cls
* @return
*/
public static String printConstructor(Class<?> cls) {
StringBuffer sb = new StringBuffer();
Constructor<?>[] constructors = cls.getConstructors();
for (Constructor<?> constructor : constructors) {
sb.append(Modifier.toString(constructor.getModifiers()))
.append(" ").append(cls.getSimpleName()).append("(");
Class<?>[] clss = constructor.getParameterTypes();
if (clss.length > 0) {
for (int i = 0; i < clss.length; i++) {
Class<?> paramType = clss[i];
sb.append(paramType.getSimpleName());
sb.append(" ");
sb.append("paramType" + (i + 1));
sb.append(",");
}
sb.deleteCharAt(sb.length() - 1);
}
sb.append(")").append("{").append("\n").append("\n");
sb.append("}").append("\n").append("\n");
}
return sb.toString();
}
/**
* 反射函数
*
* @param cls
* @return
*/
public static String printMethod(Class<?> cls) throws Exception {
StringBuffer sb = new StringBuffer();
Method[] methods = cls.getDeclaredMethods();
for (Method method : methods) {
// method.setAccessible(true);
sb.append(Modifier.toString(method.getModifiers()));
sb.append(" ");
String returnStr = method.getReturnType().getSimpleName();
sb.append(returnStr);
// if("Set".equalsIgnoreCase(returnStr)){
// //method.invoke(Object, new Object[]());
// }
sb.append(" ");
sb.append(method.getName());
sb.append("(");
Class<?>[] clss = method.getParameterTypes();
if (clss.length > 0) {
for (int i = 0; i < clss.length; i++) {
Class<?> paramType = clss[i];
sb.append(paramType.getSimpleName());
sb.append(" ");
sb.append("paramType" + (i + 1));
sb.append(",");
}
sb.deleteCharAt(sb.length() - 1);
}
sb.append(")");
sb.append("{");
sb.append("\n").append("\n");
sb.append("}");
sb.append("\n").append("\n");
Company company = (Company) cls.newInstance();
if ("private".equalsIgnoreCase(Modifier.toString(method
.getModifiers()))) {
// 启用和禁用访问安全检查的开关,true是不检查,false是检查(默认),不启用安全检查可以提高反射速度
method.setAccessible(true);
method.invoke(company, (Object[]) null);
method.setAccessible(false);
}
// method.setAccessible(false);
}
return sb.toString();
}
}