書式設定を処理するヘルパー クラスを作成したいと考えています (つまり、句読点を削除して型を変換するメソッドや、名前の再書式設定などを行うメソッドがあります)。これはフィールドを必要としないようです - その唯一の目的は、渡されたものを変換して、再フォーマットして返すことです。コンストラクターを除外するのは悪い習慣ですか? もしそうなら、私のコンストラクタは何をすべきですか? このリンクを見ていて、記述されているクラスにコンストラクターがないことに気付きました。
6 に答える
コンストラクターを除外するのは悪い習慣ですか?
はい - コンストラクターを指定しない限り、 Java コンパイラーはクラス自体と同じ可視性を持つコンストラクターを提供するためです。
すべてのメソッドが静的であると仮定すると (ポリモーフィズムが必要な場合を除いて可能性が高いと思われます)、他の開発者がクラスのインスタンスを誤って作成しないように、クラスを作成しfinal
てコンストラクターを指定する必要があります。API について考えるとき、開発者が愚かなことをする能力を取り除くことができるときはいつでもそうします :)private
次のようなものです:
public final class Helpers {
private Helpers() {
}
public static String formatDate(Date date) {
// etc
}
}
方程式からポリモーフィズムを取り除くことによって、テストなどのためにこの動作を変更する可能性も排除していることに注意してください。
状態を持たない、または状態を必要としないすべてのメソッドを持つクラスは、コンストラクターを非公開にすることで、コンストラクターの可視性を自由に減らすことができます。
Java のjava.lang.Mathクラスの例。
クラスと同様の仕事をするすべての静的メソッドと同様に、誰もそのクラスのインスタンスを誤って作成できないように、コンストラクターを宣言してjava.lang.Math
いますprivate
。
/**
* Don't let anyone instantiate this class.
*/
private Math() {}
悪い習慣ではありません。ただし、指定した例には、オブジェクト コンテキストで使用できるメンバー変数がありません。このような状況では、メソッドを呼び出す前にクラスのオブジェクトを作成するためにメモリを割り当てる必要がないため、静的メソッドを使用することをお勧めします。
コンパイラは、デフォルトのコンストラクター (パラメーターなし) を生成します。クラスに状態がなく、初期化が必要なクラスを拡張しない場合は、明示的なコンストラクターを宣言せずにそのままにすることができます
クラスにインスタンス変数がないため、コンストラクターを省略しても問題ありません。
コンストラクターは、インスタンス変数を初期化するためのものです!
コンストラクターをスキップしても、コンパイラーはデフォルトのコンストラクターを挿入しますが、これは十分に公平です!!
各クラスにはデフォルトのコンストラクターがありますが、通常はクラスでコンストラクターを定義することをお勧めします。
ただし、オーバーロードされたコンストラクターを使用したり、シングルトン パターンを作成したりする特別な必要がない場合は、コンストラクターを削除できます。
あなたのケースで静的メソッドを使用している場合、このクラスのオブジェクトを持つ必要がないため、コンストラクターを定義する必要もありません。