Java - 反射使用(调用私有方法、修改私有属性、获取父类私有字段)

简介: Java - 反射使用(调用私有方法、修改私有属性、获取父类私有字段)

调用私有方法

public class PrivateMethod {
    private String sayHello(String name) {
        return "hello "+name;
    }
}

测试

package com.java.test;
import java.lang.reflect.Method;
public class PrivateMethodTest {
    public static void main(String[] args)throws Exception {
        PrivateMethod  p = new PrivateMethod();
        Class<?> classType = p.getClass();
        Method method = classType.getDeclaredMethod("sayHello", new Class[]{String.class});
        method.setAccessible(true);//压制java的检查机制
        String str = (String)method.invoke(p, new Object[]{"lzyer"});
        System.out.println(str);
    }
}

修改私有属性

public class PrivateField{
    private String name="zhangsan";
    public String getName() {   
        return this.name;
    }
}

测试

package com.java.test;
import java.lang.reflect.Field;
public class PrivateFieldTest {
    public static void main(String[] args)throws Exception {
        PrivateField p = new PrivateField();
        Class<?> clazz = p.getClass();
        Field field = clazz.getDeclaredField("name");
        field.setAccessible(true);//压制java检查机制
        field.set(p, "lisi");
        System.out.println(p.getName());
    }
}

获取父类私有字段

@Test
public void myTest() {
    CustomerApiInfoReqDtoNew t = new CustomerApiInfoReqDtoNew();//改成你要操作的子类
    Class className = t.getClass();
    Map<String, Object> param = new HashMap<>();
    try{
        for (; className != Object.class; className = className.getSuperclass()) {//获取本身和父级对象
            Field[] fields = className.getDeclaredFields();//获取所有私有字段
            for (Field field : fields) {
                field.setAccessible(true);
                param.put(field.getName(), field.get(t) == null ? "" : field.get(t));
            }
        }
        System.out.print(JsonUtil.toJson(param));//打印子类和父类所有字段,注意:JsonUtil改成你自己的json解析工具
    }catch (Exception e){
        e.printStackTrace();
    }
}
目录
相关文章
|
2月前
|
消息中间件 Java Kafka
在Java中实现分布式事务的常用框架和方法
总之,选择合适的分布式事务框架和方法需要综合考虑业务需求、性能、复杂度等因素。不同的框架和方法都有其特点和适用场景,需要根据具体情况进行评估和选择。同时,随着技术的不断发展,分布式事务的解决方案也在不断更新和完善,以更好地满足业务的需求。你还可以进一步深入研究和了解这些框架和方法,以便在实际应用中更好地实现分布式事务管理。
|
2月前
|
Java
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
84 9
|
14天前
|
Java 数据库连接 Spring
反射-----浅解析(Java)
在java中,我们可以通过反射机制,知道任何一个类的成员变量(成员属性)和成员方法,也可以堆任何一个对象,调用这个对象的任何属性和方法,更进一步我们还可以修改部分信息和。
|
2月前
|
安全 Java 开发者
Java中WAIT和NOTIFY方法必须在同步块中调用的原因
在Java多线程编程中,`wait()`和`notify()`方法是实现线程间协作的关键。这两个方法必须在同步块或同步方法中调用,这一要求背后有着深刻的原因。本文将深入探讨为什么`wait()`和`notify()`方法必须在同步块中调用,以及这一机制如何确保线程安全和避免死锁。
47 4
|
2月前
|
Java
深入探讨Java中的中断机制:INTERRUPTED和ISINTERRUPTED方法详解
在Java多线程编程中,中断机制是协调线程行为的重要手段。了解和正确使用中断机制对于编写高效、可靠的并发程序至关重要。本文将深入探讨Java中的`Thread.interrupted()`和`Thread.isInterrupted()`方法的区别及其应用场景。
68 4
|
2月前
|
Java 数据处理 数据安全/隐私保护
Java处理数据接口方法
Java处理数据接口方法
28 1
|
2月前
|
监控 Java
Java基础——反射
本文介绍了Java反射机制的基本概念和使用方法,包括`Class`类的使用、动态加载类、获取方法和成员变量信息、方法反射操作、以及通过反射了解集合泛型的本质。同时,文章还探讨了动态代理的概念及其应用,通过实例展示了如何利用动态代理实现面向切面编程(AOP),例如为方法执行添加性能监控。
|
3月前
|
Java API
Java 对象释放与 finalize 方法
关于 Java 对象释放的疑惑解答,以及 finalize 方法的相关知识。
63 17
|
2月前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
140 4
|
2月前
|
Java
Java的反射
Java的反射。
39 2