Javaで文字列配列のためのコピーコンストラクタ

フランシス・ブラウン:

だから私は現在、アレイ文字列リストとリンクされた文字列のリストのための方法を再作成されたプロジェクトに取り組んでいます。ArrayStringListとLinkedStringListの両方を実装することをSTRINGLISTインターフェースは、あります。唯一のAPIドキュメント - 私たちは、インタフェースのソースコードを見ることができません。各クラスのために、我々は両方のクラスのデフォルトコンストラクタ、コピーコンストラクタを作成する必要があります。私は走ったテスト、およびパスが、ArrayStringListのコピーコンストラクタの両方が機能しないと、「ヌル」または「-1」のエラーメッセージを投げてきたデフォルトのコンストラクタをしました。私は、継承とインターフェイスにはかなり新しいです、と私は、文字列配列データ・タイプVSオブジェクトパラメータはビットオフ私を投げていると思います。

ここで私はこれまで持っているコード、およびコンストラクタで使用される方法は次のとおりです。

私のコピーコンストラクタ:

private String[] stringArray;
private int size;

public ArrayStringList(StringList sl) {
    size = sl.size();
    ArrayStringList asl = new ArrayStringList();
    for(int i = 0; i < size-1; i++) {
        if(sl.get(i) != null) {
            asl.set(i,sl.get(i).toString());
        } //if
    } // for
} // copy constructor

サイズ方法:

public int size() {
    return stringArray.length;
} // size

メソッドを取得します。

public String get(int index) {
    if(index < 0 || index >= size) {
        throw new IndexOutOfBoundsException("out of bounds");
} else {
        return stringArray[index];
    }
} //get

設定方法:

public String set(int index, String s) {
    String old = stringArray[index];
stringArray[index] = s;
    return old;
} // set

次のようにプロジェクトでは、コピーコンストラクタの説明がありました。

実装クラスは、明示的にコピーコンストラクタを定義する必要があります。コピーコンストラクタは、インターフェイスタイプのSTRINGLISTの正確つのパラメータを取る必要があります。それは、リストのディープコピーはコンストラクタのパラメータによって参照される新しく構築されたリストオブジェクトを作成する必要があります。そのため、新しいリストオブジェクトの初期サイズと文字列の要素は、他のリストと同じになります。明確にするために、他のリストはSTRINGLISTインタフェースの任意実装の対象とすることができます。オブジェクトの種類について他の仮定がなされるべきではありません。

Rostyslav Barmakov:
public class ArrayStringList implements StringList {

  private static final int INITIAL_CAPACITY = 10;

  private String[] stringArray;
  private int size;

  public ArrayStringList(StringList sl) {
    stringArray = sl.toArray();
    size = stringArray.length;
  }


  public ArrayStringList() {
    stringArray = new String[INITIAL_CAPACITY];
    size = 0;
  }

  // TODO: Extract 'if-cascade' to an validate(..) method 
  @Override
  public String set(int index, String s) {
    if (index >= size) {
      throw new IndexOutOfBoundsException("")
    } else if (s == null) {
      throw new NullPointerException("the specified string is null");
    } else if (s.isEmpty()) {
      throw new IllegalArgumentException("specified string is empty");
    }
    String old = stringArray[index];
    stringArray[index] = s;
    return old;
  }

  // TODO: Check if posible to extend the stringArray
  @Override
  public boolean add(String s) {
    if (s == null) {
      throw new NullPointerException("the specified string is null");
    } else if (s.isEmpty()) {
      throw new IllegalArgumentException("specified string is empty");
    }

    if (size == stringArray.length) {
      int newListCapacity = stringArray.length * 2;
      stringArray = Arrays.copyOf(stringArray, newListCapacity);
    }
    stringArray[++size] = s;
    return true;
  }

  // TODO: implement other methods ...
}

この実装はまだバグがあることに注意してください、しかし、あなたは、開始点として使用することができます

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=316299&siteId=1