我从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中的可扩展性。在同一here上也有讨论。
现在,如果我升级到版本4,我的代码就会中断。扩展实用程序类以添加自定义/特定实用程序方法的最佳实践是什么?
最佳答案
尽管我投票赞成“基于观点”,但我想向您提供一些建议。
正如您在链接讨论中已经说过的,首先扩展实用程序类是一种不好的做法。版本4中的更改可能针对该约定。
扩展实用工具类(仅使用静态方法)毫无意义,因为无论如何您都无法覆盖静态方法。但是,您可以隐藏它们。这意味着可能会意外地发生这种情况。因此,它具有没有实际价值的风险。如果仅使用两个实用程序类,它并没有真正使您的代码更复杂。甚至有编译器警告不要直接访问静态方法。
扩展实用程序类以添加自定义/特定实用程序方法的最佳实践是什么?
总结:最佳实践不是扩展它们,而是使用第二个定制实用程序类。