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

时间:2013-04-02 09:01:58

标签: java

使用Java反射:

  • 如何获取给定对象的所有方法(私有,受保护,公共等)
  • 也许创建一个类
  • 的结构表示
  • 最后,将对象序列化为String或byte array

这个想法看起来不错吗?或者这不会让我到任何地方?

我想要达到的目标是:

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

4 个答案:

答案 0 :(得分:1)

听起来很复杂。只需使用XStream

String xml = new XStream().toXML(whatever);

答案 1 :(得分:0)

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

getDeclaredMethods将为您提供对课程中所有方法的访问权限。

  

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

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

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

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

答案 2 :(得分:0)

要获取课程的所有方法和字段,请使用getDeclaredMethodsgetDeclaredFields。我不确定你是否可以用它来重新编写一个非序列化的类,但我不确定我是否会这样做。但也许你可以在这里找到一些想法:How to serialize a non-serializable in Java?

答案 3 :(得分:0)

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());    
}