镜头套件:FunkSVD

Lenskit: FunkSVD

我需要稍微更改一下 FunkSVD 算法。基本上,我只需要替换 FunkSVDUpdater,但事实证明 FunkSVDUpdater 和 FunkSVDUpdateRule 都是最终的 类,这意味着我无法扩展它们。我的解决方案是复制 FunkSVD 类 并进行必要的更改。

这里是 LensKit 首席开发人员。

它们是最终的,因为我们通常采用 'final by default' 方法(与 Effective Java 一致),反过来,因为很难设计 classes 来扩展而不面对未来的更新,事情会严重崩溃,尤其是在保持任何类型的 API 保证的情况下。

通常,我们做的是有一个接口(或者偶尔是一个抽象class)最终class实现,然后接口可以重新实现。 FunkSVD 更新程序和更新规则尚未完成 classes;这主要是疏忽或避难所't-gotten-to-it-yet 问题。

所以,目前最好的办法就是复制代码。我们当然愿意开放这些扩展点;我建议 opening an issue on GitHub 在那里我们可以更详细地讨论这样做的后果并跟踪和完成工作。