可以序列化一个方法吗?因为当我查看文档时,方法类并没有实现Serializable。那么有没有其他选择呢?
发布于 2011-02-07 16:22:52
由于方法不实现Serializable,因此无法使用标准Java Serialization API对其进行序列化。
一种解决方法是手动序列化类和方法的名称及其参数类型。然后,您可以在反序列化过程中重新创建方法实例。
发布于 2011-02-07 16:29:25
这取决于你是什么意思。真的,正如前面提到的,方法不能序列化。但是,如果您希望序列化该方法实现的逻辑并(例如)将其通过网络发送,则是可能的。这个序列化可以通过序列化类本身来完成。实际上,.class已经是一个可以存储(并且通常是存储)在文件中的字节序列。如果需要,可以只通过网络发送它,然后使用Class.forName()进行实例化。此外,您还可以做得更好:使用HttpClassLoader,将您的类可用的HTTP URL传递给它,使用这个类加载器创建类实例,并运行您想要的任何方法。
发布于 2012-10-26 20:15:34
您可以使用以下包装器来允许方法序列化:
public class SerializableMethod implements Serializable
{
private static final long serialVersionUID = 6631604036553063657L;
private Method method;
public SerializableMethod(Method method)
{
this.method = method;
}
public Method getMethod()
{
return method;
}
private void writeObject(ObjectOutputStream out) throws IOException
{
out.writeObject(method.getDeclaringClass());
out.writeUTF(method.getName());
out.writeObject(method.getParameterTypes());
}
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException
{
Class<?> declaringClass = (Class<?>)in.readObject();
String methodName = in.readUTF();
Class<?>[] parameterTypes = (Class<?>[])in.readObject();
try
{
method = declaringClass.getMethod(methodName, parameterTypes);
}
catch (Exception e)
{
throw new IOException(String.format("Error occurred resolving deserialized method '%s.%s'", declaringClass.getSimpleName(), methodName), e);
}
}
}https://stackoverflow.com/questions/4919205
复制相似问题