我有一个接口Thing
,该接口可以由通过插件系统提供的其他接口继承(换句话说,我无法维护派生接口的代码)。另外,我还有一个接口ThingSaver
,用于保存Thing
(例如在DB中)。
interface Thing {
String getInfo1();
int getInfo2();
}
interface ThingSaver {
void save(Thing thing);
}
但是插件的接口能够将新信息添加到Thing
中,例如:
interface CustomThing extends Thing {
double getInfo3();
}
因此,他们也需要保存此新信息(例如,在DB的单独表中)。因此,要实现这些插件添加自己的API来保存CustomThing
:
interface CustomThingSaver extends ThingSaver {//it must not inherit `ThingSaver` but let's suppose it must to
void save(CustomThing customThing);
}
此API必须用于保存CustomThing
。但是不是LSP违规,我们不能仅通过将CustomThing
传递给ThingsSaver
来保存所有信息(如果我们将CustomThing
传递给通常的{{1 }}仅保存常规信息?