2012-01-22 36 views
3

私はJavaDocsの使い方に慣れ親しんでいます。私はString関数を見ていましたが、文字列が本当にプライベートリファレンス変数に保持されている文字の配列であることは興味深いと思いました。Stringソースコードにコンストラクタが表示されますが、JavaDocsには表示されません。なぜですか?

私はそれが次のようにコンストラクタのいずれかを示し、Stringのソースコードを見ていたとき:

String(int offset, int count, char value[]) { 
    this.value = value; 
    this.offset = offset; 
    this.count = count; 
} 

その後、私はString JavaDoc見に越える、それはコンストラクタを示していませんそのタイプの署名で..何を与える?

+3

パブリックコンストラクタですか? –

+0

Reflectionを使用してこのコンストラクタを使用できることに注意してください。http://stackoverflow.com/questions/6636734/does-instanceof-void-always-return-false –

答えて

3

some random version of the Java documentationによれば、投稿した署名を持つStringの公開コンストラクタはありません。したがって、これは実装用の内部(プライベート)コンストラクタであると思われます。このコンストラクタは、直接使用するつもりはないため、文書化されていません。

標準ライブラリでは、多くの類似した関連するパブリックインターフェイス関数を少数の実際のワーカー関数に集約する内部ヘルパー関数を使用することがよくあります。

+1

実際にはパッケージプライベートであるため( 'java.lang 'パッケージは新しいクラスを追加することから保護されています)、コーシャJavaプログラムがリフレクションに頼らずにそれを使用することは不可能です。 –

3

ソースコードの右そのコンストラクタ以上のコメントがあります:

// Package private constructor which shares value array for speed. 
String(int offset, int count, char value[]) { 
    this.value = value; 
    this.offset = offset; 
    this.count = count; 
} 

この非パブリックコンストラクタのドキュメントは、公開資料に記載されていない理由を説明します。

7

Oliが上記のコメントで示唆したように、コンストラクタは公開されていません。

:あなたは本当にそのコンストラクタを望んでいた場合、実質的に同じである1が、異なる順序ではあるが、追加の注意点として

// Package private constructor which shares value array for speed. 
String(int offset, int count, char value[]) { 

:少なくともOpenJDKの中で、コードがコメントで示されていますソースから

String(char[] value, int offset, int count) 
+0

ああ、プライベートパッケージだよ。これは、パッケージjava.langの下のどのクラスもそれを正しく使用できることを意味しますか? – PMull34

+0

はい、その親クラスまたはパッケージ内の他のどのクラスでも使用できます。将来の参照のために、アクセス修飾子がその前にない場合は、デフォルトでは 'package-private'です。 – DMan

3

:スピードの値の配列を共有する

644 //パッケージプライベートコンストラクタ。それはあなたが頼ることができる何かではありませんよう

非publicメソッドは、多くの場合、javadocツールの一部ではない(または、あなたがjava.langでのじゃないから、この場合には、使用は、それがパッケージプライベートです)。

+0

素晴らしい、ありがとう – PMull34

2
// Package private constructor which shares value array for speed. 
String(int offset, int count, char value[]) 

このように、クラスの外側からオブジェクトを作成することができないように、この方法でStringクラスにセキュリティを提供できます。このコンストラクタはシングルトンで実装されています。

関連する問題