java Field 类属性反射

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方法就行了 :

  1. 获取目标类的包名:
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

猜你喜欢

转载自blog.csdn.net/qq_31142237/article/details/82252446
今日推荐