20

AString CharSequenceです。Java ライブラリの多くのメソッドは受け入れられるCharSequenceため、より一般的に動作します。一部のクラスにはメソッド ( など) があり、同等のStringメソッド(などWriter.write(String)) で実装されます。AppendableCharSequenceWriter.append(CharSequence)

そのようなクラスに委譲するクラスを作成していて、何らかのテキスト入力が必要な場合、その入力が aStringまたは であることを選択できますCharSequence。後者を選択すると、クライアントにより多くのオプションが提供され、クラスがより柔軟になります。しかし、そうするコードはあまり見当たりません。テキスト引数は、ほぼ常に aStringではなくCharSequence. を使用することのマイナス面はありCharSequenceますか? パフォーマンス ヒットはありますか?それとも、単にプログラマーの慣習や無知が原因であり、Stringよりもむしろの使用を引き起こしているのCharSequenceでしょうか?

比較

class XMLWriter {
   private final Writer writer;

   // more stuff here

   public void writeComment(String text) {
      writer.write("<!-- ");
      writer.write(text);
      writer.write(" -->");
   }
}

class XMLWriter {
   private final Writer writer;

   // more stuff here

   public void writeComment(CharSequence text) {
      writer.write("<!-- ");
      writer.append(text);
      writer.write(" -->");
   }
}
4

1 に答える 1

14

CharSequenceJavadocの引用:

equalsこのインターフェイスは、およびhashCodeメソッドの一般契約を改良するものではありません。したがって、実装する 2 つのオブジェクトがCharSequence等しいかどうかをテストした結果は、一般に未定義です。各オブジェクトは異なるクラスによって実装される可能性があり、各クラスがそのインスタンスが他のインスタンスと等しいかどうかをテストできるという保証はありません。したがって、任意CharSequenceのインスタンスをセット内の要素として、またはマップ内のキーとして使用することは不適切です。

したがって、IMO String の代わりに CharSequence を使用する前に、よく考える必要があります。

于 2011-12-09T12:17:47.090 に答える