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.目标类字段反射

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Survivor001

你可以相信我,如果你愿意的话

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值