2

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

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,我的代码就会中断。扩展实用程序类以添加自定义/特定实用程序方法的最佳实践是什么?

4

1 回答 1

4

虽然我投票赞成“基于意见”,但我想给你一些意见。

正如您在链接讨论中已经说过的那样,扩展实用程序类首先是一种不好的做法。版本 4 中的更改可能针对的是该约定。

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

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

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

于 2017-05-29T12:50:51.210 回答