2012-01-01 14 views
3

Collectionsはパブリッククラスなので、暗黙のデフォルトコンストラクタを呼び出すことができます。オブジェクトの作成や静的ファクトリメソッドの強制を防ぐプライベートコンストラクタはありません。 new Collections()としてインスタンス化すると、「コンストラクタが表示されません」というエラーが表示されます。なぜ、java.util.Collectionsクラスのインスタンスを持つことができないのですか?ありがとう。なぜコレクションクラス(コレクションインターフェイスではない)のインスタンスを作成できないのですか?

+3

どうしたらよいでしょうか? – SLaks

+0

そしてあなたはそれを何のためにしたいですか? – fge

+3

私の 'java.util.Collections'クラスにはプライベートコンストラクタがあります! – home

答えて

8

documentationより:「このクラスは、コレクションで動作するか、コレクションを返す静的メソッドのみから成っています。

つまり、Collectionsは単なるメソッドの集まりです。そのインスタンスは意味をなさないでしょう。それは数学関数のようなものです。数学のインスタンスがなく、関数を使うだけです。

具体的な方法は、interfaceではありません。

+0

ありがとうございます。どのコンセプトでCollectionsクラスのインスタンスを作成できないのでしょうか。それは役に立たないと私は同意する、私は好奇心のためだけに頼んでいる。再度、感謝します。 – Ahamed

+1

@Ahamed:私のコメントを参照してください、私的な(見えない)コンストラクタがあります – home

+1

好奇心は質問をする完全に正当な理由です、Ahamed! :) –

4

「コンストラクタが表示されません」というメッセージの理由は、コンストラクタがプライベート(行73)であるか、少なくともthis siteに従うということです。既に述べたように、このクラスのインスタンスは静的メソッドのみを含んでいるため、あなたはどうしますか?

// Suppresses default constructor, ensuring non-instantiability. 
private Collections() { 
} 
+0

ありがとう。ソースコードにはそこにありますが、私はクラスの内部を覗いてくれたデコンパイラがプライベートコンストラクタを表示していませんでした。 – Ahamed

+1

@Ahamed - 使用している逆コンパイラに問題があります。 'javap'を使ってみてください。 –

+0

私は 'javap'コマンドを試しました。それは非公開のコンストラクタを表示していない、それが空のコンストラクタである理由がわからない。クラスファイルの内部に存在し、インスタンス化を防ぐprivateコンストラクタがありますが、decompilerまたはjavapコマンドには表示されません:) – Ahamed

関連する問題