1

使用 Java 反射:

  • 如何获取给定对象的所有方法(私有、受保护、公共等)
  • 也许创建类的结构表示
  • 最后,将对象序列化为字符串或字节数组

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

我想要实现的是能够:

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

4 回答 4

1

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

String xml = new XStream().toXML(whatever);
于 2013-04-02T09:07:05.203 回答
0

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

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

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

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

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

我不确定你为什么需要这样做,因为它已经存在。您总是可以检索一个对象的类,它为您提供了它的结构。

于 2013-04-02T09:05:46.327 回答
0

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

于 2013-04-02T09:06:36.103 回答
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());    
}
于 2013-04-02T09:11:56.407 回答