我有一个界面Serializable
。Item
这个类对我的应用程序中的每个子类都有方法。然而,并非所有实现的类Serializable
都有该方法的合理实现serialize
。由于我的应用程序中的安全限制,一些序列化程序不应该能够序列化所有不同的对象。
我应该如何解决这个问题?我是否应该序列化一条消息,上面写着“由于安全限制,Serializer 无法序列化对象”。还是我应该抛出一个 RuntimeException?还是有其他“解决”这个问题的方法?
我有一个界面Serializable
。Item
这个类对我的应用程序中的每个子类都有方法。然而,并非所有实现的类Serializable
都有该方法的合理实现serialize
。由于我的应用程序中的安全限制,一些序列化程序不应该能够序列化所有不同的对象。
我应该如何解决这个问题?我是否应该序列化一条消息,上面写着“由于安全限制,Serializer 无法序列化对象”。还是我应该抛出一个 RuntimeException?还是有其他“解决”这个问题的方法?
您的逻辑会违反一项重要原则:接口隔离原则
接口隔离原则指出不应强迫客户端实现他们不使用的接口。代替一个胖接口,许多基于方法组的小接口是首选的,每个接口服务一个子模块。
因此,我将创建两个不同的基类来满足您的要求:
Item
SerializableItem
你的访问者只会依赖SerializableItem
对象:
public void visit(SerializableItem sItem)
当然,只要访问者不处理它,就可以在 kind 中仅收集两个类的共同行为(与序列化无关) 。AbstractItem
投掷UnsupportedOperationException("Non serializable")
是第一个猜测。当然,在编译时发现这一点会很棒,但访问者模式并不是为此而设计的。
一个不能提供合理实现的类不Serializable
应该实现它。无论如何,这个问题很不清楚。接口是否在您的设置中Serializable
声明了该accept()
方法?它不应该。如果不可序列化的项目可能是项目的特殊子类,那么您就不能visit(MyNotSerializableItem)
在访问者中实现。