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),则这不起作用