2

我有一个界面SerializableItem这个类对我的应用程序中的每个子类都有方法。然而,并非所有实现的类Serializable都有该方法的合理实现serialize。由于我的应用程序中的安全限制,一些序列化程序不应该能够序列化所有不同的对象。

我应该如何解决这个问题?我是否应该序列化一条消息,上面写着“由于安全限制,Serializer 无法序列化对象”。还是我应该抛出一个 RuntimeException?还是有其他“解决”这个问题的方法?

4

3 回答 3

2

您的逻辑会违反一项重要原则:接口隔离原则

接口隔离原则指出不应强迫客户端实现他们不使用的接口。代替一个胖接口,许多基于方法组的小接口是首选的,每个接口服务一个子模块。

因此,我将创建两个不同的基类来满足您的要求:

  • Item
  • SerializableItem

你的访问者只会依赖SerializableItem对象:

public void visit(SerializableItem sItem) 

当然,只要访问者不处理它,就可以在 kind 中收集两个类的共同行为(与序列化无关) 。AbstractItem

于 2012-11-18T19:02:09.333 回答
0

投掷UnsupportedOperationException("Non serializable")是第一个猜测。当然,在编译时发现这一点会很棒,但访问者模式并不是为此而设计的。

于 2012-11-18T18:51:17.400 回答
0

一个不能提供合理实现的类不Serializable应该实现它。无论如何,这个问题很不清楚。接口是否在您的设置中Serializable声明了该accept()方法?它不应该。如果不可序列化的项目可能是项目的特殊子类,那么您就不能visit(MyNotSerializableItem)在访问者中实现。

于 2012-11-18T18:53:25.487 回答