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