1.反射
反射是指在运行过程中,可以获取任意类的属性和方法信息;
对于任意对象,都可以获取调用其任意方法;
这种动态获取类信息和动态调用对象方法的方式称为Java语言的反射机制;
public class ReflectTest {
public static void main(String[] args) {
User user = new User();
try {
Field nameField = user.getClass().getDeclaredField("name");//获取属性name的对象
nameField.setAccessible(true);//解除权限检查
nameField.set(user,"xiaomi");//设置属性值
String name = (String)nameField.get(user);//获取属性值
System.out.println(name);
} catch (Exception e) {
e.printStackTrace();
}
}
}
2.内省
标准JavaBean类,属性值的操作是由其get和set方法来操作的;
内省(Introspector)是Java语言对JavaBean类属性、事件的处理方法;
Java提供了一套API来访问某个属性的getter/setter方法,这些API存放在java.beans中;
public class IntrospectorTest {
public static void main(String[] args) {
User user = new User();
try {
//操作指定属性名称的属性
PropertyDescriptor pd = null;
pd = new PropertyDescriptor("name", User.class);
Method w = pd.getWriteMethod();//获取属性的set方法
w.invoke(user, "mini");
Method r = pd.getReadMethod();//获取属性的get方法
r.invoke(user, null);
System.out.println(user.toString());
//操作所有属性
BeanInfo bi = Introspector.getBeanInfo(User.class);
PropertyDescriptor[] pds = bi.getPropertyDescriptors();
for(PropertyDescriptor p : pds){
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
网友评论