当我尝试序列化一个Method对象时,我收到此错误。
java.io.NotSerializableException: java.lang.reflect.Method
任何想法?
答案 0 :(得分:6)
您可以手动执行此操作。只需将类名,方法名和参数类名序列化为字符串,然后在反序列化期间使用反射机制重新创建Method对象。
Class.forName(clsName).getMethod("methodName", Class.forName(param1ClsName), ....);
如果您实现Externalizable接口,那么您可以将您的类用作常规可序列化类。
答案 1 :(得分:3)
java.lang.reflect.Method
未实施java.io.Serializable
。因此无法使用内置Java方法进行序列化。
答案 2 :(得分:2)
无法以可移植的方式序列化方法对象,因为它不包含恢复它的所有必要信息(例如,字节码)。
相反,您应该序列化类的名称,方法名称和参数类型。然后,您可以在反序列化期间重新创建Method
实例。
答案 3 :(得分:1)
假设java.lang.reflect.Method
对象是另一个类的成员,您应该将其标记为瞬态,并在反序列化后使用类名和方法名/签名重新创建它。
您可以为此目的实现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;
}
}