2017-01-27 8 views
1

私はいくつかの自然言語処理を行っています。したがって、Sentenceクラスは基本的にいくつかのメタ情報を持つArrayListです。スペースで区切られたStringを単純にペーストするtoString()メソッドを上書きして書きたいと思います。継承されたgetメソッドを使用して作業していますが、フィールドに直接アクセスすることが可能かどうかと、効率とコーディングの面でより優れているかどうかは疑問でした。 get()メソッドを使用することをお勧めしtoStringメソッドは、arrayListから継承されています。

public class Sentence extends ArrayList<String> { 
    int sentimentScore; 
    String Speaker; 

    @Override 
    public String toString(){ 
     StringBuilder sb = new StringBuilder(); 
     for(int i =0; i < super.size(); i++){ 
      sb.append(super.get(i)); 
      sb.append(" "); 
     } 
     return sb.toString(); 
    } 

答えて

2

:ここ

は私のクラスの簡易版です。スピードワイズでは、コードを大幅に遅くするべきではありません(そうでないと思われる場合、その信念を保持する前に速度低下の効果を実証するための小さなプログラムを書くべきです)。さらに重要なことは、ArrayListは内部フィールドを公開しておらず、それは良い設計です。この設計は、保守者がArrayListの内部実装を変更することを決定した場合、将来の副作用(それを拡張するサブクラス)を保護します。代わりにSentenceSentenceArrayListが含まれている聞かせて、ArrayListを拡張させるの - ところで

は、あなたはまた、代替設計を検討する必要があります。これは、の原則と呼ばれ、継承を超える継承です。ウィキペディアから

:継承(又は複合再使用原理)上https://en.wikipedia.org/wiki/Composition_over_inheritance

組成 オブジェクト指向プログラミングでは(クラスが その組成によって多形挙動及びコード再利用を達成すべきであるという原則であります基本クラスまたは親クラスから継承するのではなく、目的の 機能を実装する他のクラスのインスタンスを含む によって)。 これは、OOPのよく言われる原則であり、影響力のある デザインパターンのようなものです:「オブジェクトパターンを優先する」クラス「 継承」。

+1

続きを読むための説明と提案をありがとうございます。 –

関連する問題