关于java的反射,调用私有方法(有参数私有方法),私有属性
程序员文章站
2024-01-20 22:27:04
...
第一步,创建一个实体类,里面有私有属性和私有方法
package com.wbs.fanshe.domain;
public class Person {
private int age = 19;
private String name ;
public String getName(){
return name;
}
private String setName(String name){
this.name= name;
return "老罗的锤子手机很好用";
}
private String setNameAndAge(String name ,int age){
this.name = name;
this.age = age;
return "老罗写的书《我的奋斗》很好看很搞笑";
}
}
第二步,获得私有属性的值,调用私有方法(有参数私有方法)
package com.wbs.fanshe.test;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import com.wbs.fanshe.domain.Person;
public class testPerson {
public static void main(String[] args) {
Person person = new Person();
try {
Class clazz = Class.forName("com.wbs.fanshe.domain.Person");
Person obj = (Person) clazz.newInstance();
//1.获取私有属性值
//注意:是getDeclaredField,不是getField
Field privateStringField = clazz.getDeclaredField("age");
//允许访问私有字段
privateStringField.setAccessible(true);
//获得私有字段值
int fieldValue = (int) (privateStringField).get(obj);
System.out.println("Person私有属性:"+fieldValue);
//2.调用私有方法(有参数且只有一个参数)
Method methodOne = clazz.getDeclaredMethod("setName",String.class);
//允许访问私有方法
methodOne.setAccessible(true);
//调用私有方法获得返回值
String stringOne = (String) methodOne.invoke(obj,"黄小明");
System.out.println("调用私有方法(一个参数)的返回值:"+stringOne);
//3.调用私有方法(有参数且有多个参数)
Method methodTwo = clazz.getDeclaredMethod("setNameAndAge",String.class,int.class);
//允许访问私有方法
methodTwo.setAccessible(true);
//调用私有方法获得返回值
String stringTwo = (String) methodTwo.invoke(obj,"乔布斯",25);
System.out.println("调用私有方法(多个参数)的返回值::"+stringTwo);
} catch (Exception e) {
e.printStackTrace();
}
}
}
上一篇: wpf - Text Viewer
下一篇: C# 反射(Reflection)