2013-04-09 10 views
11

フォーマットを扱うヘルパークラスを作っています(つまり、句読点を削除し、タイプ間の変換や名前の再フォーマットなどのメソッドがあります)。これは、フィールドが必要なようには思えません。その唯一の目的は、変換して返すために渡されたものを取得し、再フォーマットすることです。コンストラクタを外すことは悪い習慣ですか?もしそうなら、私のコンストラクタは何をしていますか?私はthis linkを見ていて、それが記述するクラスにはコンストラクタがないことに気づいた。持っているか、どのような状態を必要としないすべてのメソッドを持っているJava - クラスコンストラクタを持たないことは悪い習慣ですか?

答えて

39

コンストラクタを除外するために悪い習慣ですか?

はい - あなたはどんなコンストラクタを指定しない限りので、Javaコンパイラは、あなたのクラス自体と同じ可視性を持つコンストラクタを提供します。

すべてのメソッドは静的なものと仮定 - あなたはポリモーフィズムを希望しない限り、そう思われる - ときに、他の開発者が誤って、あなたのクラスのインスタンスを作成しないないようにあなたは、あなたのクラスfinalを作成し、それをprivateコンストラクタを与える必要がありますそれは無意味であろう。 APIについて考えるとき、いつでも私は私がやる、愚かな何かをする開発者のための能力を削除することができますので、:)

だから、のようなもの:

public final class Helpers { 
    private Helpers() { 
    } 

    public static String formatDate(Date date) { 
     // etc 
    } 
} 

なお、式のうち、多型をとることにより、私は「今まで、ノー静」の信者ではないよ - - あなたもうまく罰金かもしれテストなどのために、この動作を変更する可能性を取り除くしているが、それは検討する価値があります。

+0

+1はプライベートコンストラクタを推奨します。 –

+2

私は何かを学んだ:) – kishu27

+0

ありがとう!私は決して(私のJavaでの非常に短い経験の中で)以前は私的なコンストラクタを見たことはありませんでした。 –

5

任意のクラスは、コンストラクタのプライベートを作ることによって、コンストラクタの可視性を減らすために自由です。

java.lang.Math Javaのクラス。 java.lang.Mathとして

は、誰もが誤ってそのクラスのインスタンスを作成することができないように、彼らはprivateとしてコンストラクタを宣言したクラスと同様の仕事をすべての静的メソッドを持っています。

/** 
    * Don't let anyone instantiate this class. 
    */ 
    private Math() {} 
3

悪い習慣ではありません。指定した例には、Objectコンテキストで使用できるメンバー変数はありません。このような状況では、メソッドを呼び出す前にクラスのオブジェクトを作成するためにメモリを割り当てる必要がないため、静的メソッドを持つことをお勧めします。

-2

通常は、各クラスにはデフォルトコンストラクタを持っていても、クラスであなたのコンストラクタを定義するのは良いコーディングプラクティスです。

しかし、あなたはoveloadedコンストラクタを使用するか、あなたは、コンストラクタを削除することができます任意のシングルトンパターンを作るために、特別なニーズを持っていない場合。

あなたのケースで静的メソッドを使用している場合は、コンストラクタを定義する必要はありません。このクラスのオブジェクトを持つ必要はありません。

1

コンパイラは、デフォルトのコンストラクタ(パラメータなし)を生成します。あなたのクラスが状態を持たず、初期化が必要なクラスを拡張していない場合、明示的なコンストラクタを宣言することなくそれを放棄することができます。

1

クラスにインスタンス変数がないので、

コンストラクタは、インスタンス変数を初期化するためのものです。

まだコンストラクタをスキップすると、コンパイラはデフォルトのコンストラクタを挿入します。

関連する問題