java - 通过反射调用嵌套的 deepobject 方法
问题描述
是否可以使用反射从真实对象调用嵌套对象内的嵌套方法?像这样的东西
val fieldDefinition = chatClient.javaClass.getDeclaredField("class1")
.type.getDeclaredField("class2").type.getDeclaredField("class3")
我拥有的真实对象是chatClient,我想调用class3的方法,我不能直接获得,而是通过class1路径。
解决方案
您可以在循环内的函数中获取嵌套字段的逻辑for
,这样您就可以避免代码重复。
java中的整个代码示例:
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
class Class1 {
Class2 class2 = new Class2();
}
class Class2 {
Class3 class3 = new Class3();
}
class Class3 {
Class4 class4 = new Class4();
}
class Class4 {
public void display(){
System.out.println("Hello World");
}
}
public class Test {
static Object getFieldValue(String fieldPath ,Object object) throws NoSuchFieldException, IllegalAccessException {
String[] pathList = fieldPath.split("\\.");
for(String path : pathList){
Field field = object.getClass().getDeclaredField(path);
field.setAccessible(true);
object = field.get(object);
}
return object;
}
public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException, NoSuchMethodException, InvocationTargetException {
Class1 class1Object = new Class1();
Object object = getFieldValue("class2.class3.class4", class1Object);
Method method = object.getClass().getMethod("display");
method.invoke(object);
}
}
这里fieldPath
的getFieldValue
意思是嵌套字段对象的路径。
推荐阅读
- apache - 如何在 Apache Knox 中启用 SSO?
- python - 在python中正确分配数据结构
- fortran - 无论如何检查矩阵行中的n个项在fortran中是否相等?
- azure - 应用服务 HTTP/2 不工作
- python - 带有链式比较的 PyCharm 输入警告
- ros - 如何查看所有当前使用的包?
- node.js - 在 docker 镜像中运行 npm test 并退出
- encryption - 如何使用 NCryptDecrypt 使用 RSA_PKCS1_OAEP_PADDING 解密由 OpenSSL 加密的数据?
- powershell - 使用powershell解压缩文件夹后如何计算每个文件的列数
- android - Android:如何以 12 小时格式显示美国时间和 24 小时格式英国时间?