JAVA反射系列之Field,java.lang.reflect.Field使用获取方法。

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

首先必须明一点 Field类主要是用来辅助获取和操作类的属性的

1.怎么通过反射获取类的属性

     先来看JDK提供的方法有如下几种:

         a)Class.getDeclaredField(String name);

     返回一个 Field 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明字段

     b)Class.getDeclaredFields();

      返回 Field 对象的一个数组,这些对象反映此 Class 对象所表示的类或接口所声明的所有字段

    c)Class.getField(String name);

       返回一个 Field 对象,它反映此 Class 对象所表示的类或接口的指定公共成员字段

    d)Class.getField();

              返回一个包含某些 Field 对象的数组,这些对象反映此 Class 对象所表示的类或接口的所有可访问公共字段

    来一个例子来说明一下 :

   实体类:

 import java.util.Date;
/*** @ClassName: Student* @Description: 学生实体* @author JoseanLuo  * @date 2014-3-18 下午5:17:35* @version V1.0 */
public class Student
{private Long id;private String name;private Date createdate;private String no;public String nickname;
public Long getId()
{return id;
}
public void setId(Long id)
{this.id = id;
}
public String getName()
{return name;
}
public void setName(String name)
{this.name = name;
}
public Date getCreatedate()
{return createdate;
}
public void setCreatedate(Date createdate)
{this.createdate = createdate;
}
public String getNo()
{return no;
}
public void setNo(String no)
{this.no = no;
}
public String getNickname()
{return nickname;
}
public void setNickname(String nickname)
{this.nickname = nickname;
}}

     测试类:

import java.lang.reflect.Field;
import java.util.Date;
/*** @ClassName: ReflectFieldTest* @Description: 反射Field测试。* @author JoseanLuo  * @date 2014-3-18 下午5:16:17* @version V1.0 */
public class ReflectFieldTest
{public static void main(String[] args)
{    Student stu=new Student();stu.setId(1L);stu.setName("Josean");stu.setNo("201403185203344");stu.setCreatedate(new Date());try{Field property1=stu.getClass().getDeclaredField("name");System.out.println(property1);//private java.lang.String com.cx.test.Student.nameField property3=stu.getClass().getField("nickname");System.out.println(property3);//public java.lang.String com.cx.test.Student.nickname//错误方法 getField系列方法只能获取公共字段//Field property2=stu.getClass().getField("name");//System.out.println(property2);//会抛java.lang.NoSuchFieldException} catch (SecurityException e){e.printStackTrace();} catch (NoSuchFieldException e){e.printStackTrace();}
}}

 

2.进行属性获取更改

   得到这个Field之后你就可以获取他的值或者设置他的值了。

   获取他的值用get类型方法,他针对常见类型提供了对应get方法,这里就不一一列举了。

   值得注意的是获取私有属性的时候必须先设置Accessible为true,然后才能获取。

   同理设置的时候调用set类型方法,这里也不一一列举了,下面放代码。


import java.lang.reflect.Field;
import java.util.Date;
/*** @ClassName: ReflectFieldTest* @Description: 反射Field测试。* @author JoseanLuo  * @date 2014-3-18 下午5:16:17* @version V1.0 */
public class ReflectFieldTest
{public static void main(String[] args) throws Exception
{    Student stu=new Student();stu.setId(1L);stu.setName("Josean");stu.setNo("201403185203344");stu.setCreatedate(new Date());stu.setNickname("copyman");Field property1=stu.getClass().getDeclaredField("name");//System.out.println(property1);//out:private java.lang.String com.cx.test.Student.nameField property3=stu.getClass().getField("nickname");System.out.println(property3.get(stu));//System.out.println(property3);//out:public java.lang.String com.cx.test.Student.nickname//错误方法 getField系列方法只能获取公共字段//Field property2=stu.getClass().getField("name");//System.out.println(property2);//会抛java.lang.NoSuchFieldExceptionField [] prFields4=stu.getClass().getDeclaredFields();for(Field field:prFields4){System.out.println(field);System.out.println(field.equals(property1));//私有变量必须先设置Accessible为truefield.setAccessible(true);//获取用get类方法。System.out.println(field.get(stu));}//设置用set类方法property3.set(stu, "名字被我改了,哈哈");System.out.println(stu.getNickname());}}

这个是控制台输出:

copyman
private java.lang.Long com.cx.test.Student.id
false
1
private java.lang.String com.cx.test.Student.name
true
Josean
private java.util.Date com.cx.test.Student.createdate
false
Tue Mar 18 18:19:39 CST 2014
private java.lang.String com.cx.test.Student.no
false
201403185203344
public java.lang.String com.cx.test.Student.nickname
false
copyman
名字被我改了,哈哈

是不是觉得很很简单呢 。

转载于:https://my.oschina.net/u/1407116/blog/209383

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/546777.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python3自带HTTP文件传输服务(局域网文件共享)

一行命令搭建一个基于python3的http文件传输服务 WIN10系统下,打开打算要分享传输的文件夹(文件夹内存放分享的文件,建议以压缩包形式存放),shift鼠标右键,出现如下图,选择“在此处打开Powershe…

90% 的人都会答错的面试题 == 和 equals 的区别

和 equals 的区别是什么? 解读对于基本类型和引用类型, 的作用效果是不同的,如下所示:基本类型:比较的是值是否相同;引用类型:比较的是引用是否相同;代码示例:String x …

【slowfast 训练自己的数据集】自定义动作,制作自己的数据集,使用预训练模型进行训练,并检测其结果

目录 前言一,视频的处理 1.1 视频准备1.2 切割视频为图片1.3 使用faster rcnn自动框人1.4 via标注图片二,数据集文件 2.1 数据集文件总览2.2 annotations 2.2.1 ava_train_v2.2.csv2.2.2 ava_val_v2.2.csv2.2.3 ava_val_excluded_timestamps_v2.2.csv2.…

windows Secure CRT使用SSH访问Linux服务器被拒绝,winscp访问Linux服务器被拒绝

我们在windows上使用Secure CRT、PUTTY等工具SSH连接到Linux服务器时,会出现linux服务器拒绝访问情况。 可能是Linux系统上没有安装SSH服务; 在终端输入: ssh localhost若出现: ssh: connect to host localhost port 22: Conne…

【代码收集】提前载入贴图

2019独角兽企业重金招聘Python工程师标准>>> 在进入一个比较大的场景的时候,我们一般都会提前load场景的贴图,使游戏更加流畅,一边加载一边显示游戏的加载的进度 具体的方法实现如下: CCTextureCache::sharedTextureCa…

Jetson nano上部署自己的Yolov5模型(TensorRT加速)onnx模型转engine文件

Jetson nano上部署自己的Yolov5模型(TensorRT加速)onnx模型转engine文件 背景 在主机上训练自己的Yolov5模型,转为TensorRT模型并部署到Jetson Nano上,用DeepStream运行。 硬件环境: RTX 2080TI主机 Jetson Nano 4…

Linux的tar、bzip2压缩解压命令

1.tar压缩 语法:tar 选项 压缩后的文件 目录 -c 打包 -z 打包同时压缩 -f 指定文件名 范例: tar -zcf test.tar.gz test2.tar解压 语法:tar 选项 解压的文件 -x 解包 -z 解压缩 -f 指定解压文件名 范例: tar -zxf test.tar.gz…

分析Linux文件rwx属性的含义

Linux上的文件以.开头的文件被系统视为隐藏文件,仅用ls命令是看不到他们的,而用ls -a除了显示 一般文件名外,连隐藏文件也会显示出来。 ls -l(这个参数是字母L的小写,不是数字1) 这个命令可以使用长格式显示文件内容,如…

程序员专属精美简历合集—第二弹

找工作除了技能之外最重要的就是简历,从某种意义上来说简历有时候比能力更重要!为什么简历如此重要?根据拉勾的招聘调研报告显示,大约有 80% 的简历通不过主筛。所以简历就是一堆 0 之前的那个 1,如果简历通不过筛选&a…

CDH6报错解决全记录

一、服务器准备 1、服务器配置 准备3台服务器,建议最低配置如下(阿里云大约每台每月六百多): centos7.4 8c 16G 39.101.192.109 node001 39.101.179.3 node002 39.99.236.205 node003 为服务器开启外网端口访问 7180、8900 2…

QT5动态创建多个按钮控件并关联信号槽函数

创建QT对话框工程,动态创建多个按钮,把动态创建的按钮存放在QList中,并关联同一个信号槽函数,在该槽函数中根据按钮对象名称各自进行其他事项处理。 在mainwindow.h文件添加 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include…

libcstl中的list没法插入自定义数据

一开始运行出错&#xff0c;开启debug以后发现在push自定义对象的时候调试器提示找不到一个叫/XXX/XXXX/XXXX/libcstl-2.3.0/src/cstl_list_private.c</br>而那个路径正是我进行安装的路径&#xff0c;安装完以后我把安装包给删除掉了&#xff0c;所以它找不到。这样的话…

Java 200+ 面试题补充 ThreadLocal 模块

让我们每天都有进步&#xff0c;老王带你打造最全的 Java 面试清单&#xff0c;认真把一件事做到极致。 本文是前文《Java 最常见的 200 面试题》的第一个补充模块。 1.ThreadLocal 是什么&#xff1f; ThreadLocal 是一个本地线程副本变量工具类。主要用于将私有线程和该线程…

如何在CDH5.16.2中部署海豚调度器Apache Dolphin Scheduler 1.2.0

Apache Dolphin Scheduler 组件介绍 分布式易扩展的可视化DAG工作流任务调度系统。致力于解决数据处理流程中错综复杂的依赖关系&#xff0c;使调度系统在数据处理流程中开箱即用。 官网 : https://dolphinscheduler.apache.org/en-us/ Github : https://github.com/apache…

Ubuntu20.04 pycharm python打包制作DEB包详细步骤及雷区

记录一次Deb打包过程及踩雷警示 最近写了一个python的小程序&#xff0c;希望能打包成deb文件&#xff0c;便于将写好的软件安装 在其他没有安装工作环境的电脑上&#xff0c;把这安装deb后可以在应用列表和桌面看到。下面介绍一个python工程的打包过程&#xff0c; 分为两大步…

有人问我,为什么1+1等于2

2019独角兽企业重金招聘Python工程师标准>>> 我回复说&#xff1a;“这是规则&#xff0c;天地万物有其规则&#xff0c;人观察而形成自己的规则。李小龙说&#xff1a;“以无法为有法&#xff0c;以无限为有限”&#xff0c;其实也是用最大的规则作为准则&#xff…

Python:通过SNMP协议获取华为交换机的ARP地址表

华为交换机SNMP配置 system-view 进入交换机的配置模式、[switch]snmp-agent community read huawei 配置community 只读属性为huawei[switch]snmp-agent community write huawei 配置community 可写属性为huawei[switch]snmp-agent sys-info version all 配置版本为所有# codi…

你真的知道 == 和 equals 的区别吗?

让我们每天都有进步&#xff0c;老王带你打造最全的 Java 面试清单&#xff0c;认真把一件事做到极致。 在 Java 中 和 equals 的区别&#xff0c;感觉只有很少的人能才完全说正确。 常见的错误回答就是&#xff1a; 基础类型对比的是值是否相同&#xff0c;引用类型对比的是…

Ray集群搭建 Python Demo

目录 准备条件&#xff08;基于linux环境&#xff09; 参考文献例子-python Ray集群 1.部署head节点2.部署worker节点部署Ray集群安装Ray&#xff08;在所有节点上安装&#xff09;Ray工作原理Ray的优势Ray简介准备条件&#xff08;基于linux环境&#xff09; 这里部署2个节点…

解决复杂多数据源报表的5种通用办法

很多报表工具只允许在报表中使用单个数据集&#xff0c;这类工具称为单源报表工具&#xff0c;常见的比如iReport&#xff0c;Birt&#xff0c;水晶报表&#xff0c;Style report等。很多情况下我们需要用单源报表工具展现多源数据&#xff0c;比如来自MysqlOracle的数据&#…