Java中方法对象的序列化是可能的吗?
我在尝试序列化方法对象时遇到此错误Java中方法对象的序列化是可能的吗?,java,reflection,serialization,Java,Reflection,Serialization,我在尝试序列化方法对象时遇到此错误 java.io.NotSerializableException: java.lang.reflect.Method 有什么想法吗?没有实现。因此,无法使用内置Java方法对其进行序列化。您可以手动进行序列化。只需将类名、方法名和参数类名序列化为字符串,然后在反序列化过程中使用反射机制重新创建方法对象 Class.forName(clsName).getMethod("methodName", Class.forName(param1ClsName), ..
java.io.NotSerializableException: java.lang.reflect.Method
有什么想法吗?没有实现。因此,无法使用内置Java方法对其进行序列化。您可以手动进行序列化。只需将类名、方法名和参数类名序列化为字符串,然后在反序列化过程中使用反射机制重新创建方法对象
Class.forName(clsName).getMethod("methodName", Class.forName(param1ClsName), ....);
如果实现了Externalizable接口,则可以将类用作常规可序列化类。无法以可移植的方式序列化方法对象,因为它不包含还原它所需的所有信息(例如字节码)
相反,您应该序列化类的名称、方法名称和参数类型。然后,您可以在反序列化过程中重新创建
方法
实例。假设java.lang.reflect.Method
对象是另一个类的成员,您应该将其标记为transient,并在反序列化后使用类名和方法名/签名重新创建它
Class.forName(clsName).getMethod("methodName", Class.forName(param1ClsName), ....);
为此,可以实现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;
}
}
呃。。。为什么要这样做?你不应该试图序列化一个方法,因为它只是一个关于方法信息的句柄,而不是方法本身。你想做什么?我怎么看哪个类在java api上实现了什么。@MarcosRorizJunior在mlk链接到的Javadoc中,有一节说,例如(对于方法),“所有实现的接口:AnnotatedElement,GenericDeclaration,Member”。这些是类实现的接口。如果任何方法参数都是基元类型(即int),则这不起作用