Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用反射-如何获取所有字段和方法_Java - Fatal编程技术网

Java 使用反射-如何获取所有字段和方法

Java 使用反射-如何获取所有字段和方法,java,Java,使用Java反射: 如何获取给定对象(私有、受保护、公共等)的所有方法 并可能创建类的结构表示 最后,将对象序列化为字符串或字节数组 这个主意听起来好吗?或者这对我没有任何帮助 我努力实现的目标是能够: 将任何java.lang.Object序列化为字节数组或字符串 未实现可序列化的类/对象将被抛出到我的应用程序中进行序列化 问题1:如何获取类的所有方法。 将为您提供对类上所有方法的访问 返回反映所有已声明方法的方法对象数组 通过该类对象表示的类或接口。这 包括公共、受保护、默认(包)访问

使用Java反射:

  • 如何获取给定对象(私有、受保护、公共等)的所有方法
  • 并可能创建类的结构表示
  • 最后,将对象序列化为字符串或字节数组
这个主意听起来好吗?或者这对我没有任何帮助

我努力实现的目标是能够:

  • 将任何
    java.lang.Object
    序列化为字节数组或字符串
  • 未实现可序列化的类/对象将被抛出到我的应用程序中进行序列化

问题1:如何获取类的所有方法。

将为您提供对类上所有方法的访问

返回反映所有已声明方法的方法对象数组 通过该类对象表示的类或接口。这 包括公共、受保护、默认(包)访问和私有 方法,但不包括继承的方法

示例:
Method[]methods=Integer.class.getDeclaredMethods()

问题2:创建类的结构表示


我不知道你为什么要这么做,因为它已经存在了。您始终可以检索对象的类,该类为您提供其结构。

问题1:如何获取类的所有方法。

将为您提供对类上所有方法的访问

返回反映所有已声明方法的方法对象数组 通过该类对象表示的类或接口。这 包括公共、受保护、默认(包)访问和私有 方法,但不包括继承的方法

示例:
Method[]methods=Integer.class.getDeclaredMethods()

问题2:创建类的结构表示


我不知道你为什么要这么做,因为它已经存在了。您始终可以检索对象的类,该类为您提供其结构。

要获取类的所有方法和字段,请使用
getDeclaredMethods
getDeclaredFields
。我不确定您是否可以使用它来重新编写一个不可序列化的类,我也不确定是否可以。但也许您可以在这里找到一些想法:

要获取类的所有方法和字段,请使用
getDeclaredMethods
getDeclaredFields
。我不确定您是否可以使用它来重新编写一个不可序列化的类,我也不确定是否可以。但也许你可以在这里找到一些想法:

听起来很复杂。就用吧


听起来很复杂。就用吧


Class.getDeclaredMethods()
Class.getDeclaredFields()
仅返回在当前类中声明了任何可见性的方法和字段。这些方法不会返回继承的内容。为此,您必须迭代类层次结构,并为每个超类调用这些方法,即:

List<Method> methods = new ArrayList<>();
List<Field> fields = new ArrayList<>();
for (Class c = clazz; c != null; c = c.getSuperClass()) {
    methods.add(c.getDeclaredMethods());    
    fields.add(c.getDeclaredFields());    
}
List methods=newarraylist();
列表字段=新的ArrayList();
for(类c=clazz;c!=null;c=c.getSuperClass()){
方法.add(c.getDeclaredMethods());
add(c.getDeclaredFields());
}

类.getDeclaredMethods()
类.getDeclaredFields()
仅返回在当前类中声明的任何可见性的方法和字段。这些方法不会返回继承的内容。为此,您必须迭代类层次结构,并为每个超类调用这些方法,即:

List<Method> methods = new ArrayList<>();
List<Field> fields = new ArrayList<>();
for (Class c = clazz; c != null; c = c.getSuperClass()) {
    methods.add(c.getDeclaredMethods());    
    fields.add(c.getDeclaredFields());    
}
List methods=newarraylist();
列表字段=新的ArrayList();
for(类c=clazz;c!=null;c=c.getSuperClass()){
方法.add(c.getDeclaredMethods());
add(c.getDeclaredFields());
}

您尝试过什么吗?只需查看有关反射的文档。为什么需要对所有类型的对象进行反射?如果您不需要为所有obejct使用它,那么为什么现有的序列化lib不能满足您的要求?您尝试了什么吗?只需查看有关反射的文档。为什么需要对所有类型的对象进行反射?如果不是所有OBEJCT都需要它,为什么现有的序列化库不能满足您的要求?我对这种XML封送的担心是实际类型可能会丢失,这个Xtream库是否返回相同的对象类型?或者仅仅是字符串?我对XML封送的担心是实际类型可能会丢失,这个Xtream库是否返回相同的对象类型?还是仅仅用绳子?