0

6つのプライベート静的メソッドとプライベートコンストラクターを使用してクラスを作成しました。プライベートコンストラクターは、すべての静的メソッドを実行します。クラスのプライベートコンストラクターを別のクラスで呼び出したいのですが、呼び出すことができません。私が欲しいのは、何のインスタンスも作成せずに、このクラスを1回実行することだけです。このクラスは小さなデータベースにデータを入力します。一度呼び出す以外に必要はありません。

メソッドに入れることはできますが、無関係なコードをメインクラスに入れたくありません。私はすべてをもっと分離したい。パブリックコンストラクターを使用してそれを実行し、クラスのインスタンスを作成することもできますが、インスタンスが不要なときになぜそのように実行する必要があるのか​​わかりません。

私がやろうとしていることを達成するための良い方法はありますか?

4

5 に答える 5

2

プライベート コンストラクターをパブリックな静的メソッドに置き換えてみませんか?

元のコード:

public class DatabaseInitializer
{
    private DatabaseInitializer()
    {
        init1();
        init2();
        ...
    }

    private static void init1() { ... }
    private static void init2() { ... }
    ...
}

新しいコード

public class DatabaseInitializer
{
    public static void Init() 
    { 
        init1();
        init2();
        ...
    }

    private static void init1() { ... }
    private static void init2() { ... }
    ...
}

あなたがそれを呼ぶより:

Main()
{
    DatabaseInitializer.Init();
}
于 2012-07-25T16:12:24.040 に答える
2

シングルトンは正確に 1 つのインスタンスを作成します。インスタンスが必要ない場合は、静的メソッドを 1 つ公開するだけです。これが一度だけ呼び出されることを確認したい場合は、クラスで静的カウンターまたはブール値を作成して、メソッドが2回目に呼び出されるのを防ぎますインスタンスなしでコンストラクターを呼び出すことは、パブリックであっても不可能です

于 2012-07-25T16:14:33.603 に答える
1

別のクラスでクラスのプライベートコンストラクターを呼び出したい

-

私が欲しいのは、何もインスタンスを作成せずにこのクラスを1回実行することだけです

クラスのインスタンスを作成したくない場合は、コンストラクターを使用しないでください。クラスを使用してコードを「分離」したいだけだと思いますか?そのために静的メソッドを使用します。

または、このコードを1回実行して、いくつかの静的メソッドを呼び出す必要がある場合。静的コンストラクターを使用できます

class B
{
  static B() {
    //this stuff called when you create this class or when a static member is referenced

 }
于 2012-07-25T16:23:02.087 に答える
0
  1. 私見、これはメインクラスの無関係なコードではありません。これらの方法に依存します。
  2. クラスに public メソッドを 1 つだけ持つことができます。依存クラスは、そのメソッドを呼び出して、処理を行っているすべてのプライベート メソッドを呼び出すことができます。
于 2012-07-25T16:09:11.997 に答える
0

それまたはそのメンバーを別のクラスから呼び出したい場合は、パブリック メソッドを作成する必要があります。

このクラスのインスタンスが不要な場合は、呼び出すことができる public static メソッドを作成する必要があります。

public static メソッドには、静的ブール値が必要です。呼び出されると、その値をチェックし、設定されていない場合は、静的ブール値を切り替えて (以前に呼び出されたことを認識します)、一度だけ実行する必要があるすべてのプライベート静的メソッドを呼び出します。

この初期化を 1 回の作業で 1 回ではなく、データベースに対して 1 回だけ行う必要がある場合は、静的コードを実行し、データベースをチェックして、データベースが既に初期化されているかどうかを確認する必要があります。テストできるブール値を保持する1行のテーブルを用意することで、これを特に簡単にすることができます。初期化コードを更新して、DB の初期化時にその値を設定し、起動コードでその値をテストして、その値とその値に基づいて実行するアクションを決定します。

于 2012-07-25T16:38:21.470 に答える