当前位置: 首页 > news >正文

按要求完成下面两个方法的方法体

  1. 写一个方法,此方法可将obj对象中名为propertyName的属性的值设置为value.
    public void setProperty(Object obj, String propertyName, Object value){}
  2. 写一个方法,此方法可以获取obj对象中名为propertyName的属性的值
    public Object getProperty(Object obj, String propertyName){}

使用反射技术实现。 使用Field对象给成员变量赋值、取值

public class Student {
    private int age;
    private String name;

    public Student() {
    }

    public Student(int age, String name) {
        this.age = age;
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Student{" +
                "age=" + age +
                ", name='" + name + '\'' +
                '}';
    }
}


public class Test {
    public static void main(String[] args) throws Exception {
        Student student = new Student(18, "王宝强");

        setProperty(student, "age", 21);

        System.out.println(student);

        Object obj = getProperty(student, "name");

        System.out.println(obj);
    }

    public static void setProperty(Object obj, String propertyName, Object value) throws Exception {

        Class clazz = obj.getClass();

        Field propertyNameField = clazz.getDeclaredField(propertyName);

        propertyNameField.setAccessible(true);

        propertyNameField.set(obj, value);

    }

    public static Object getProperty(Object obj, String propertyName) throws Exception {
        Class clazz = obj.getClass();

        Field propertyNameField = clazz.getDeclaredField(propertyName);

        propertyNameField.setAccessible(true);

        return propertyNameField.get(obj);
    }
}

相关文章:

  • 对Collection接口的子类ArrayList进行代理,以前的remove(Object obj)方法是删除集合中第一次出现的元素(比如集合中有多个“abc”,调用remove(“abc”)后只会
  • liunx7系统centos6.8版本编译安装php7
  • 如果ngxin不能使用service nginx start 开启
  • linux7下centos6.8开启某个端口
  • liunx7下centos6.8编译安装nginx1.12.1
  • liunx7下centos6.8编译安装mysql-5.7.18
  • 关于linux下查看磁盘,内容,CPU使用情况的命令
  • Linux系统IO分析工具之iotop参数详解(查看IO占用)
  • 正则表达式之完全体验
  • 安装libpng提示--configure: error: ZLib not installed
  • WINDOWS之端口和进程查看命令
  • 3种方法轻松处理php开发中emoji表情的问题
  • linux下升级openssl到新版本
  • linux7下centos6.8版本完全编译php7.17与nginx
  • linux7下centos6.8版本完全编译php7.17与nginx --后续,配置nginx.conf与php-fpm.conf,www.conf
  • 时间复杂度分析经典问题——最大子序列和
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • Flannel解读
  • Laravel 实践之路: 数据库迁移与数据填充
  • laravel 用artisan创建自己的模板
  • PV统计优化设计
  • Quartz初级教程
  • Spring Boot快速入门(一):Hello Spring Boot
  • vue学习系列(二)vue-cli
  • Zepto.js源码学习之二
  • 记录一下第一次使用npm
  • 离散点最小(凸)包围边界查找
  • 免费小说阅读小程序
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • 你对linux中grep命令知道多少?
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​决定德拉瓦州地区版图的关键历史事件
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • #define、const、typedef的差别
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • ${factoryList }后面有空格不影响
  • (1) caustics\
  • (11)MSP430F5529 定时器B
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (实战篇)如何缓存数据
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • (转)我也是一只IT小小鸟
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • .axf 转化 .bin文件 的方法
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .NET Core引入性能分析引导优化
  • .NET MVC 验证码
  • .net php 通信,flash与asp/php/asp.net通信的方法
  • .NET 设计模式—适配器模式(Adapter Pattern)
  • .NET 中 GetHashCode 的哈希值有多大概率会相同(哈希碰撞)
  • .NET值类型变量“活”在哪?
  • .w文件怎么转成html文件,使用pandoc进行Word与Markdown文件转化
  • /etc/sudoer文件配置简析