为了账号安全,请及时绑定邮箱和手机立即绑定

如果需要更改库功能我该怎么办

如果需要更改库功能我该怎么办

MMMHUHU 2022-05-21 13:44:44
我在 Java 库(open-m3u)中有一个类,我需要稍微改变一下。该功能很容易实现,无需使用库。该库是开源的,所以我可以访问它的所有代码。该类的制作方式使得继承它甚至改变那一小部分都是不可能的。我的问题是我应该复制那个类和它所依赖的所有类并将它们放在我自己的代码库中并更改功能还是应该自己实现功能。或者还有其他选择吗?
查看完整描述

3 回答

?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

该功能很容易实现,无需使用库。

恕我直言,那就是要走的路。您的其他选择是:

  • 围绕库构建功能:您说在您的情况下这是不可能的。

  • 在您自己的源代码控制系统中创建库的一个分支。这意味着您必须使该存储库与库维护者保持同步,这意味着永久性负担。你必须检查图书馆的许可证关于分叉的内容。

  • 将相关部分复制到您的代码库中并在那里进行修改。然后,您将无法从未来的增强或错误修复中获利,但仍然必须维护由其他人创建和架构的代码,并且不完全符合您的要求。你必须检查图书馆的许可证关于将部分复制到外国代码库中的内容。

他们都有自己的缺点。

总而言之:在 25 年的专业软件开发中,我看到了外部库的成功使用和完全的失败。有时,我们在评估现有库(然后发现没有任何匹配项)上投入的时间比我们自己实施项目特定解决方案所需的时间更多。

您可以不用的每个库都使配置管理和部署变得更加容易。


查看完整回答
反对 回复 2022-05-21
?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

装饰器模式允许您向现有对象添加新功能。


如果你使用的 java 库有这样的类:


public class LibraryClass implement ILibraryInterface {


    public void someMethod() {

        ...

    }

}

然后你可以创建Decorator类:


public class LibraryClassDecorator implement ILibraryInterface {


    private LibraryClass libObj;


    public LibraryClassDecorator(LibraryClass libObj) {

        this.libObj = libObj;

    }


    public void someMethod() {

        libObj.someMethod();

        // here you can do whatever you want. 

        // Add some additional logic

        // transform result value if there is some

    }


}

注意:您必须实现相同的接口才能遵循Liskov 替换原则


查看完整回答
反对 回复 2022-05-21
?
万千封印

TA贡献1891条经验 获得超3个赞

一个解决方案是创建一个扩展您想要更改的类并覆盖您想要更改的部分的类



查看完整回答
反对 回复 2022-05-21
  • 3 回答
  • 0 关注
  • 88 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号