首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在java中扩展实用程序类的最佳实践

在java中扩展实用程序类的最佳实践
EN

Stack Overflow用户
提问于 2017-05-29 10:54:54
回答 1查看 2.9K关注 0票数 3

我从apache-commons-3扩展了类,以添加我自己的实用程序函数,这些函数在它们中不可用。例如:

代码语言:javascript
复制
public class CollectionUtils extends org.apache.commons.collections.CollectionUtils
{
        /**
     * Similar to collection.contains(member) except just doesn't throw NPE when set is null, simply returns false
     * @param collection
     * @param member
     * @return
     */
    public static <K> boolean contains(Collection<K> collection,K member)
    {
        return collection!=null && collection.contains(member);
    }
}

这解决了我通过同一个类CollectionUtils使用我的函数&公域函数的目的。

但是,Apache通过在实用程序类中引入私有构造函数,消除了版本4中的可扩展性。也有关于同一这里的讨论。

现在,如果升级到版本4,我的代码就会中断。扩展实用程序类以添加自定义/特定实用程序方法的最佳实践是什么?

EN

回答 1

Stack Overflow用户

发布于 2017-05-29 12:50:51

虽然我以“意见为基础”投票接近,但我想给你一些意见。

正如您在链接讨论中已经说过的,扩展实用程序类首先是一种糟糕的实践。第4版的改动很可能是针对这个惯例的。

扩展实用程序类(只使用静态方法)是没有意义的,因为无论如何您都不能覆盖静态方法。不过,你可以把它们藏起来。这意味着,这可能伴随着意外行为的发生。因此,它有一个没有实际价值的风险。如果只使用两个实用程序类,这并不会使代码变得更复杂。甚至还有一个编译器警告不要直接访问静态方法。

扩展实用程序类以添加自定义/特定实用程序方法的最佳实践是什么?

总结一下:最佳实践不是扩展它们,而是使用第二个自定义实用程序类。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44240762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档