我已经从apache-commons-3扩展了类来添加我自己的实用程序函数,这些函数在它们中不可用。 e.g:
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);
}
}
这解决了我使用我的功能的目的。 commons通过同一个类CollectionUtils
运行。
但是,Apache通过在实用程序类中引入私有构造函数来删除版本4中的可扩展性。还讨论了相同的here。
现在,如果我升级到版本4,我的代码就会崩溃。扩展实用程序类以添加自定义/特定实用程序方法的最佳做法是什么?
答案 0 :(得分:3)
虽然我投票赞成&#34;意见为基础&#34;我想给你一些意见。
正如您在链接讨论中已经说过的那样,扩展实用程序类首先是一种不好的做法。版本4的变化可能是针对该惯例的。
扩展实用程序类(仅使用静态方法)毫无意义,因为无论如何都无法覆盖静态方法。但是,您可以隐藏它们。这意味着这可能会在意外行为的情况下发生。所以它有风险没有实际价值。如果你只使用两个实用程序类,它并没有真正使你的代码更复杂。甚至还有一个编译器警告,指出不能直接访问静态方法。
扩展实用程序类以添加自定义/特定实用程序方法的最佳做法是什么?
总结:最佳做法不是扩展它们,而是使用第二个自定义实用程序类。