我的系统中存在很多Callback
个对象。 Callback
定义如下:
public interface Callback { void callback() throws Exception; } Callback cb = new Callback() { public void callback() { System.out.println("I'm here!"); } }
现在,我需要将这些Callback
对象序列化为字节,以便它们可以存储在redis服务器中,稍后再回来运行callback()
方法。
显然,像杰克逊这样的Java常用序列化库在这里不起作用。为了运行callback()
代码,序列化字节必须包含类信息。 JDK序列化是一个选项:
public interface Callback extends java.io.Serializable { void callback() throws Exception; } Callback cb = new Callback() { private static final long serialVersionUID = 1L; public void callback() { System.out.println("I'm here!"); } }
但是,通过这种方式,Callback
的所有子类以及callback()
方法引用的类都需要实现java.io.Serializable
接口,这很难控制。
所以,我想知道是否有另一种序列化方式不需要所有类型的限制?
答案 0 :(得分:5)
Java序列化不会存储比Jackson更多的信息。 (除了Java序列化支持图形和Jackson支持树之外)都不存储带有序列化数据的代码。
通常尝试使用数据存储代码是个坏主意。代码可以是;
您应该确保您可能要序列化的所有内容都在数据中,而不是代码中。
序列化字节必须包含类信息
这不是序列化的工作原理。通常假设所需的所有类都可用于反序列化数据的过程。
Callback的所有子类以及callback()
引用的类
当父级是Serializable时,它的所有子类也都是Serializable。