Javaでコンストラクターをprivate宣言することはできる?条件とシングルトンパターンでの活用例
はい、Javaではコンストラクターを private として宣言することができます。
コンストラクターをprivateにすると、クラスの外部からそのクラスのインスタンス(オブジェクト)を直接生成できなくなります。この性質を利用する代表的なデザインパターンが、シングルトンパターン(Singleton Design Pattern)です。
プライベートコンストラクターの主な特徴・条件
- privateコンストラクターを持つクラスは継承(サブクラス化)できません。
- クラスの外部からインスタンスを生成できません。
- クラス内に定数(定数メソッド)しか持たない場合に有効です。
- すべてのメソッドがstaticである場合にも使用できます。
- privateコンストラクターを持つクラスを継承しようとすると、コンパイルエラーが発生します。
サンプルコード:シングルトンパターンの実装例
class SingletonObject {
private SingletonObject() {
System.out.println("In a private constructor");
}
public static SingletonObject getObject() {
// コンストラクターを呼び出せるのはクラス内部だけ
if (ref == null)
ref = new SingletonObject();
return ref;
}
private static SingletonObject ref;
}
public class PrivateConstructorDemo {
public static void main(String args[]) {
SingletonObject sObj = SingletonObject.getObject();
}
}実行結果
In a private constructor
解説
このコードでは、SingletonObject クラスのコンストラクターがprivateで宣言されているため、外部から new SingletonObject() を呼び出すことはできません。代わりに、staticメソッドの getObject() を通じて初めてインスタンスが生成され、以降は同じインスタンス(ref)が再利用されます。
このようにprivateコンストラクターは、インスタンスの生成をクラス自身に限定したい場合や、ユーティリティクラスのようにインスタンス化を防ぎたい場合に非常に有用なテクニックです。
-
JavaでJTableをフィルタリングする方法!TableRowSorterとsetRowFilter()の使い方を解説
JTableは、テーブルを柔軟に作成・表示できるSwingのコンポーネントです。テーブルの内容を扱うためのメソッドはTableModelインターフェースで定義されており、実際にはAbstractTableModelクラスを継承して独自のテーブルモデルを実装するのが一般的です。また、JTableではsetCellEditor()メソッドにTableCellEditorインターフェースの実装オブジェクトを渡すことで、セルの編集機能を追加することもできます。 テーブルの表示内容をフィルタリング(絞り込み)するには、TableRowSorterクラスのsetRowFilter()メソッドを使用します。
-
JavaのJToggleButton実装ガイド:ON/OFF切替ボタンの作り方を解説
JToggleButtonとは JToggleButtonはAbstractButtonを拡張したクラスで、クリックするたびにONとOFFが切り替わるトグルボタンを実現するために使用されます。通常のボタンと異なり、押した状態を保持できるのが特徴です。 JToggleButtonの主な特徴 最初に押されたときは押し込まれた状態のままとなり、もう一度押してはじめて元の状態(押されていない状態)に戻ります。 ボタンが押されるたびにActionEventが発生します。 さらに、JToggleButtonはItemEventも発生させることができます。このイベントは、選択状態という概念を持つコンポー