测试代码
package main
import java.lang.annotation.Annotation
import java.lang.reflect.Constructor
import java.lang.reflect.Field
import java.lang.reflect.Method
import bean.Animal
public class TestMain {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
showClass()
System.out.println("//////////////////////////////////////////////////////////")
System.out.println("使用一个参数的构造器...")
System.out.println(createAnimalByConstructor("bean.Cat", "Mr Cat"))
System.out.println(createAnimalByConstructor("bean.Dog", "Mr dog"))
System.out.println("使用两个参数的构造器...")
System.out.println(createAnimalByConstructor("bean.Cat", "Mr Cat",18))
System.out.println(createAnimalByConstructor("bean.Dog", "Mr dog",20))
System.out.println("使用method反射构造对象...")
System.out.println(createAnimalByMethod("bean.Bird","setAge", new Object[]{30}))
System.out.println(createAnimalByMethod("bean.Bird","setNameAndAge", new Object[]{"小燕子",30}))
}
public static Animal createAnimalByConstructor(String clazzStr,String name) throws Exception{
Class clazz = Class.forName(clazzStr)
Constructor constructor = clazz.getConstructor(name.getClass())
Animal animal = (Animal)constructor.newInstance(name)
return animal
}
public static Animal createAnimalByConstructor(String clazzStr,String name,Integer age) throws Exception{
Class clazz = Class.forName(clazzStr)
Constructor constructor = clazz.getConstructor(new Class[]{name.getClass(),age.getClass()})
Animal animal = (Animal)constructor.newInstance(name,age)
return animal
}
public static Object createAnimalByMethod(String clazzStr,String methodName,Object[] args) throws Exception{
Class clazz = Class.forName(clazzStr)
Object object = clazz.newInstance()
Class[] classes = new Class[args.length]
for(int i=0
classes[i] = args[i].getClass()
}
Method method = clazz.getMethod(methodName, classes)
method.invoke(object, args)
return object
}
public static void showClass() throws ClassNotFoundException{
Class clazz = Class.forName("bean.Cat")
System.out.println(clazz)
Annotation[] annotations = clazz.getAnnotations()
System.out.println("Annotation...")
for(Annotation annotation:annotations){
System.out.println(annotation.toString()+" : "+annotation.annotationType())
}
Constructor[] constructors = clazz.getConstructors()
System.out.println("*********************************")
System.out.println("Constructor...")
for(Constructor constructor:constructors){
System.out.println("--------------------------------")
System.out.println(constructor.getName())
System.out.println(constructor.getModifiers())
Class[] parameterClasses = constructor.getParameterTypes()
System.out.println("getParameterTypes...")
for(Class parameterClass:parameterClasses){
System.out.println(parameterClass.getName())
}
System.out.println(constructor.getTypeParameters())
}
System.out.println("*********************************")
System.out.println("getDeclaredClasses...")
Class[] declaredClasses = clazz.getDeclaredClasses()
for(Class declaredClass:declaredClasses){
System.out.println(declaredClass.getName()+" : "+declaredClass.getSimpleName())
}
System.out.println("*********************************")
System.out.println("getDeclaredFields...")
Field[] fields = clazz.getDeclaredFields()
for(Field field:fields){
System.out.println(field.getName()+" : "+field.getType().getName())
}
System.out.println("*********************************")
System.out.println("getFields...")
fields = clazz.getFields()
for(Field field:fields){
System.out.println(field.getName()+" : "+field.getType().getName())
}
System.out.println("*********************************")
System.out.println("getSuperclass: "+clazz.getSuperclass().getName())
System.out.println("*********************************")
System.out.println("getDeclaredMethods...")
Method[] methods = clazz.getDeclaredMethods()
for(Method method:methods){
System.out.println("---------------------------")
System.out.println(method.getName())
Class[] parameters = method.getParameterTypes()
for(Class parameterClass:parameters){
System.out.println(parameterClass.getName()+" : "+parameterClass.getSimpleName())
}
}
}
}
测试结果
class bean.Cat
Annotation...
*********************************
Constructor...
--------------------------------
bean.Cat
1
getParameterTypes...
java.lang.String
[Ljava.lang.reflect.TypeVariable;@ae3865e
--------------------------------
bean.Cat
1
getParameterTypes...
java.lang.String
java.lang.Integer
[Ljava.lang.reflect.TypeVariable;@5f8a8ae7
*********************************
getDeclaredClasses...
*********************************
getDeclaredFields...
age : java.lang.Integer
*********************************
getFields...
*********************************
getSuperclass: bean.Animal
*********************************
setAge
eat
eat