Field在java开发中经常会被用到,而且是非要重要的类,常常用到类对象去反射出对象类的一些属性,从而达到映射的效果.通常会被用到一些工具里面实现实体类等等的属性映射功能.
这里简单的介绍一下有关目标类的各种反射方法:
首先我们准备一个实体类FieldEntity:
package Field;
public class FieldEntity implements FieldParent{
private Integer id=1;
private String usename="caomm";
public String password="4473127";
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsename() {
return usename;
}
public void setUsename(String usename) {
this.usename = usename;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
在准备一个简单的接口类:
package Field;
public interface FieldParent {
}
现在开始弄个测试类去测试FieldTest,这里准备个main方法就行了 :
- 获取目标类的包名:
public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException {
FieldEntity fieldEntity = new FieldEntity();
Package pag = fieldEntity.getClass().getPackage();
System.out.println("目标类的所在包:"+pag.getName());
}
}
输出结果:
目标类的所在包:Field
2.反射目标类的接口
public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException {
FieldEntity fieldEntity = new FieldEntity();
// 返回目标类所有的接口
Class<?>[] inf = fieldEntity.getClass().getInterfaces();
for(Class<?> inf1 :inf){
System.out.println("目标类实现的所有接口类名称:"+inf1.getName());
}
}
返回结果:
目标类实现的所有接口类名称:Field.FieldParent
3.反射目标类的名称
public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException {
FieldEntity fieldEntity = new FieldEntity();
// 目标类的类名
System.out.println("目标类的类名:"+fieldEntity.getClass().getName());}
输出结果:
目标类的类名:Field.FieldEntity
4.目标类字段反射
扫描二维码关注公众号,回复:
2979125 查看本文章
public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException {
FieldEntity fieldEntity = new FieldEntity();
// 它反映此 Class 对象所表示的类或接口的指定公共成员字段。
Field fieldB = fieldEntity.getClass().getField("password");
// Field fieldname = fieldEntity.getClass().getDeclaredField("username"); // getDeclaredField 无论参数类型是private 还是public 等等.
// Field[] 返回类的公共字段字段,这些对象反映此 Class 对象所表示的类或接口的所有可访问公共字段,如果该 Class 对 象表示一个接口,则此方法返回该接口及其所有超接口的公共字段。
Field[] fields = fieldEntity.getClass().getFields();
Field[] fields1 = fieldEntity.getClass().getDeclaredFields();
for(Field field: fields1 ){
field.setAccessible(true);
System.out.println("目标类字段名称:"+field.getName());
System.out.println("目标类的字段修饰符:"+field.getModifiers());
System.out.println("目标类字段值:"+field.get(fieldEntity));
System.out.println("判断目标类字段是否为private:"+Modifier.isPrivate(field.getModifiers()));
}}
返回结果:
目标类字段名称:id
目标类的字段修饰符:2
ddddd:1
:true
目标类字段名称:usename
目标类的字段修饰符:2
ddddd:caomm
:true
目标类字段名称:password
目标类的字段修饰符:1
ddddd:4473127
:false
5.目标类方法属性反射
public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException {
//Method[] 返回类对象表示的类或接口
Method[] method = fieldEntity.getClass().getDeclaredMethods();
for(Method method1:method){
System.out.println("输出类的方法名:"+method1.getName());
System.out.println("输出累的方法类型:"+method1.getModifiers());
}}
输出结果:
输出类的方法名:getId
输出累的方法类型:1
输出类的方法名:setId
输出累的方法类型:1
输出类的方法名:getUsename
输出累的方法类型:1
输出类的方法名:setUsename
输出累的方法类型:1
输出类的方法名:getPassword
输出累的方法类型:1
输出类的方法名:setPassword
输出累的方法类型:1