/**
* 直接创建对象调用方法 */
private static void classObject(){
try {
//参数值
Object []value=new Object[]{"1","2"};
//参数类型
Class par[]=new Class[]{String.class,String.class};
Class c=Class.forName("zjnx.sibas.ReflectTest");
//创建类对象
Object object=c.newInstance();
//得到方法对象
Method method=object.getClass().getDeclaredMethod("towStringEq", par);
//调用方法
boolean flag=Boolean.parseBoolean(method.invoke(object, value).toString());
System.out.println("flag:"+flag);
} catch (Exception e) {
e.printStackTrace();
}
}
* 直接创建对象调用方法 */
private static void classObject(){
try {
//参数值
Object []value=new Object[]{"1","2"};
//参数类型
Class par[]=new Class[]{String.class,String.class};
Class c=Class.forName("zjnx.sibas.ReflectTest");
//创建类对象
Object object=c.newInstance();
//得到方法对象
Method method=object.getClass().getDeclaredMethod("towStringEq", par);
//调用方法
boolean flag=Boolean.parseBoolean(method.invoke(object, value).toString());
System.out.println("flag:"+flag);
} catch (Exception e) {
e.printStackTrace();
}
}
**
* 调用有参构造函数,调用方法
*/
private static void clsssdeclaredObject(){
try {
//参数值
Object []value=new Object[]{new String[]{"1","2","3"},new Integer(1)};
//参数类型
Class par[]=new Class[]{String[].class,int.class};
//构造函数参数
Class declared[]=new Class[]{String.class};
//构造函数值
Object declaredValue[]=new Object[]{"1"};
Class c=Class.forName("zjnx.sibas.ReflectTest");
//初始化构造函数
Constructor constructor = c.getDeclaredConstructor(declared);
//新建对象
Object object=constructor.newInstance(declaredValue);
//得到方法对象
Method method=object.getClass().getDeclaredMethod("printValue", par);
//调用方法
method.invoke(object, value);
} catch (Exception e) {
e.printStackTrace();
}
}
private static void classMothodObject(){
try {
//构造函数参数
//参数值
Object []value=new Object[]{new String[]{"1","2","3"},new Integer(1)};
//参数类型
Class par[]=new Class[]{String[].class,int.class};
//构造函数参数
Object declared[]=new Object[]{"1"};
//类完整路径
String className="zjnx.sibas.ReflectTest";
Object object=ReflectTest.getInstance(className, declared);
//Object object=ReflectTest.getInstance(className, null);
//得到方法对象
Method method=object.getClass().getDeclaredMethod("printValue", par);
//调用方法
method.invoke(object, value);
} catch (Exception e) {
e.printStackTrace();
}
}
* 调用有参构造函数,调用方法
*/
private static void clsssdeclaredObject(){
try {
//参数值
Object []value=new Object[]{new String[]{"1","2","3"},new Integer(1)};
//参数类型
Class par[]=new Class[]{String[].class,int.class};
//构造函数参数
Class declared[]=new Class[]{String.class};
//构造函数值
Object declaredValue[]=new Object[]{"1"};
Class c=Class.forName("zjnx.sibas.ReflectTest");
//初始化构造函数
Constructor constructor = c.getDeclaredConstructor(declared);
//新建对象
Object object=constructor.newInstance(declaredValue);
//得到方法对象
Method method=object.getClass().getDeclaredMethod("printValue", par);
//调用方法
method.invoke(object, value);
} catch (Exception e) {
e.printStackTrace();
}
}
private static void classMothodObject(){
try {
//构造函数参数
//参数值
Object []value=new Object[]{new String[]{"1","2","3"},new Integer(1)};
//参数类型
Class par[]=new Class[]{String[].class,int.class};
//构造函数参数
Object declared[]=new Object[]{"1"};
//类完整路径
String className="zjnx.sibas.ReflectTest";
Object object=ReflectTest.getInstance(className, declared);
//Object object=ReflectTest.getInstance(className, null);
//得到方法对象
Method method=object.getClass().getDeclaredMethod("printValue", par);
//调用方法
method.invoke(object, value);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 按照指定的类名称 并按照指定的参数进行构造而获取实例
*
* 限制性条件为: objects 中的className 必须和构造参数中的类型一致。
*
* 如果Object 中存在 超越 参数类型的方法将导致初始化失败!!!! 例如 getInstance("Cr", {new
* Integer(2)}); 将无法应用在构造 方法 Cr(Number num)
* @param className 类名称
* @param objects 构造方法的类名称
* @return 返回构造出的实例
* @throws Exception 初始化错误时返回此项例外
*/
public static final Object getInstance(String className, Object[] objects) {
try {
Class clz = Class.forName(className);
if (objects==null ||objects.length==0)
{
return clz.newInstance() ;
}
Class[] paramClaszz = new Class[objects.length];
for (int i = 0; i < objects.length; i++) {
paramClaszz[i] = objects[i].getClass();
}
Constructor constructor = clz.getDeclaredConstructor(paramClaszz);
return constructor.newInstance(objects);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
* 按照指定的类名称 并按照指定的参数进行构造而获取实例
*
* 限制性条件为: objects 中的className 必须和构造参数中的类型一致。
*
* 如果Object 中存在 超越 参数类型的方法将导致初始化失败!!!! 例如 getInstance("Cr", {new
* Integer(2)}); 将无法应用在构造 方法 Cr(Number num)
* @param className 类名称
* @param objects 构造方法的类名称
* @return 返回构造出的实例
* @throws Exception 初始化错误时返回此项例外
*/
public static final Object getInstance(String className, Object[] objects) {
try {
Class clz = Class.forName(className);
if (objects==null ||objects.length==0)
{
return clz.newInstance() ;
}
Class[] paramClaszz = new Class[objects.length];
for (int i = 0; i < objects.length; i++) {
paramClaszz[i] = objects[i].getClass();
}
Constructor constructor = clz.getDeclaredConstructor(paramClaszz);
return constructor.newInstance(objects);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 是不是某个类的实例
* @param obj 实例
* @param cls 类
* @return 如果 obj 是此类的实例,则返回 true
*/
public boolean isInstance(Object obj, Class cls) {
return cls.isInstance(obj);
}
/**
* 得到某个对象的公共属性
* @param owner, fieldName
* @return 该属性对象
* @throws Exception
*/
public Object getProperty(Object owner, String fieldName) {
try {
Class ownerClass = owner.getClass();
Field field = ownerClass.getField(fieldName);
Object property = field.get(owner);
return property;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
* 是不是某个类的实例
* @param obj 实例
* @param cls 类
* @return 如果 obj 是此类的实例,则返回 true
*/
public boolean isInstance(Object obj, Class cls) {
return cls.isInstance(obj);
}
/**
* 得到某个对象的公共属性
* @param owner, fieldName
* @return 该属性对象
* @throws Exception
*/
public Object getProperty(Object owner, String fieldName) {
try {
Class ownerClass = owner.getClass();
Field field = ownerClass.getField(fieldName);
Object property = field.get(owner);
return property;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 得到某类的静态公共属性
* @param className 类名
* @param fieldName 属性名
* @return 该属性对象
* @throws Exception
*/
public Object getStaticProperty(String className, String fieldName){
try {
Class ownerClass = Class.forName(className);
Field field = ownerClass.getField(fieldName);
Object property = field.get(ownerClass);
return property;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
private boolean towStringEq(String str1,String str2) {
System.out.println("str1:"+str1+" str2:"+str2);
if (str1.equals(str2)) {
return true;
}else{
return false;
}
}
private void printValue(String []arr,int i) {
System.out.println("i:"+i);
for (int j = 0; j < arr.length; j++) {
System.out.println("arr["+j+"]:"+arr[j]);
}
}
* 得到某类的静态公共属性
* @param className 类名
* @param fieldName 属性名
* @return 该属性对象
* @throws Exception
*/
public Object getStaticProperty(String className, String fieldName){
try {
Class ownerClass = Class.forName(className);
Field field = ownerClass.getField(fieldName);
Object property = field.get(ownerClass);
return property;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
private boolean towStringEq(String str1,String str2) {
System.out.println("str1:"+str1+" str2:"+str2);
if (str1.equals(str2)) {
return true;
}else{
return false;
}
}
private void printValue(String []arr,int i) {
System.out.println("i:"+i);
for (int j = 0; j < arr.length; j++) {
System.out.println("arr["+j+"]:"+arr[j]);
}
}