博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java笔记之利用反射访问或修改private成员
阅读量:5896 次
发布时间:2019-06-19

本文共 1046 字,大约阅读时间需要 3 分钟。

对于类A、B,A是B的基类,A有一个私有成员name

A.java

public class A {    private String name = "A";    public void print() {        System.out.println(name);    }}

B.java

public class B extends A {}

对于A对象a,要想改变a的name,可以这样操作:

try {            Field nameFieldInA = a.getClass().getDeclaredField("name");            nameFieldInA.setAccessible(true);            nameFieldInA.set(a, "一");            a.print();        } catch (NoSuchFieldException | IllegalAccessException ex) {            ex.printStackTrace();        }

要访问a的name,可执行nameFieldInA.get(a)

对于B对象b,要改变b的name,可以这样:

import java.lang.reflect.Field;public class Main {    public static void main(String[] args) {        try {            B b = new B();            b.print();            Field field = b.getClass().getSuperclass().getDeclaredField("name");            field.setAccessible(true);            field.set(b, "B");            b.print();        } catch (NoSuchFieldException | IllegalAccessException ex) {            ex.printStackTrace();        }    }}

 

转载于:https://www.cnblogs.com/buyishi/p/10585403.html

你可能感兴趣的文章
C#的异常处理机制
查看>>
vsftp:500 OOPS: could not bind listening IPv4 sock
查看>>
Linux安装BTCPayServer并设置比特币BTC和Lightning支付网关
查看>>
Python 的 with 语句
查看>>
mysql安装,远程连接,以及修改密码
查看>>
Mybatis查询返回Map类型数据
查看>>
java的深拷贝与浅拷贝
查看>>
程序员如何提高工作效率
查看>>
promise
查看>>
将Java应用部署到SAP云平台neo环境的两种方式
查看>>
==与equal的区别
查看>>
数据批量导入Oracle数据库
查看>>
C#开源项目介绍
查看>>
调用lumisoft组件发邮件 不需要身份验证 不需要密码
查看>>
DW 正则
查看>>
【ios6.0 自学瞎折腾】(三)表示图填充数据
查看>>
清理(委托类型实例)事件处理(实例)的函数及Lambda表达式
查看>>
Create UML diagrams online in seconds, no special tools needed.yUML
查看>>
抓屏原理
查看>>
Crash/Instance Recovery与Media Recovery的本质区别
查看>>