可以在Java中序列化Method对象吗?

我尝试序列化一个Method对象时收到此错误。

java.io.NotSerializableException: java.lang.reflect.Method 

任何的想法?

无法以可移植的方式序列化方法对象,因为它不包含恢复它的所有必要信息(例如,字节码)。

相反,您应该序列化类的名称,方法名称和参数类型。 然后,您可以在反序列化期间重新创建Method实例。

你可以手动完成。 只需将类名,方法名和参数类名序列化为字符串,然后在反序列化期间使用reflection机制重新创建Method对象。

 Class.forName(clsName).getMethod("methodName", Class.forName(param1ClsName), ....); 

如果您实现Externalizable接口,那么您可以将您的类用作常规可序列化类。

java.lang.reflect.Method没有实现java.io.Serializable 。 因此无法使用内置Java方法进行序列化。

假设java.lang.reflect.Method对象是另一个类的成员,则应将其标记为transient,并在反序列化后使用类名和方法名/签名重新创建它。

您可以为此目的实现MethodInfo类。

 class SerializableClass { private transient Method m_method; //Not serialized private MethodInfo m_methodInfo; public Method getMethod() { if(m_method != null) { //Initailize m_method, based on m_methodInfo } return m_method; } }