2017-05-29 16 views
0

私はapache-commons-3からクラスを拡張し、使用できない自分のユーティリティ関数を追加しました。例えば:javaでユーティリティクラスを拡張するためのベストプラクティス

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にアップグレードするとコードが破損しています。カスタム/特定のユーティリティメソッドを追加するためのユーティリティクラスを拡張するベストプラクティスは何ですか?

答えて

1

私は「意見に基づいて」と投票しましたが、私はあなたにいくつかの情報を提供したいと思います。

リンクされた議論の中で既に述べたように、ユーティリティクラスを拡張することは、最初は悪い習慣です。バージョン4の変更はおそらくその大会を目指しています。

スタティックメソッドを上書きすることはできないので、ユーティリティクラスを(静的メソッドのみで)拡張することは意味がありません。しかし、あなたはそれらを隠すことができます。これは、意図しない振る舞いが発生する可能性があることを意味します。したがって、実際の価値がないリスクがあります。 2つのユーティリティクラスを使うだけでは、実際にコードを複雑にすることはありません。静的メソッドに直接アクセスしないというコンパイラの警告もあります。

カスタム/特定ユーティリティメソッドを追加するユーティリティクラスを拡張するベストプラクティスは何ですか?

要約:ベストプラクティスは、拡張するのではなく、2番目のカスタムユーティリティクラスを使用することです。

関連する問題