-3

入力が有効であり、すべての有効な入力がテキストファイルに記録されているかどうかをクラスに確認させたい。

したがって、構築では、テキストファイルを読み取り、すべての有効な入力をHashSetに入れます。次にstatic、入力を受け取り、入力がHashSetにあるかどうかを確認する関数があります。

コード構造は次のようになります。

public class Validator {
    HashSet validInputs;

    public Validator() {
        //read in
    }

    public static boolean validate(String in) {
        //check and return
    }
}

次に、他のクラスでは、Validatorクラスを使用して文字列を検証する必要があります。コードは次のようなものです:

...
String a = XXX;
boolean valid = Validator.validate(a);
...

コードをテストしていませんが、2つの質問があります。

  1. それは機能しますか?有効な入力テキストファイルが読み込まれていますか?
  2. クラスはいつテキストファイルを読み込みますか?
  3. Validator関数を呼び出すたびにテキストファイルを読み取りますvalidate()か?
4

4 に答える 4

5

それは機能しますか?有効な入力テキストファイルが読み込まれていますか?

いいえ、それは機能しません。

他のインスタンスメンバーにアクセスできるように、メソッドはインスタンスメソッドである必要があります。

public boolean validate(String in) {
    //check and return
}

クラスはいつテキストファイルを読み込みますか?

使用する前に、クラスを作成する必要があります。テキストファイルはコンストラクターで読み取られます。


Validatorは、関数validate()を呼び出すたびにテキストファイルを読み取りますか?

いいえ。コンストラクタは、を呼び出すときに呼び出されますnew Validator()

于 2012-06-27T21:18:15.800 に答える
1

いいえ、を使用validInputsするインスタンスを作成するまで、にアクセスすることはできませんValidatornew Validator()

  1. いいえ、使用時にファイルは読み込まれません。
  2. の新しいインスタンスを作成すると、ファイルが読み取られますValidator
  3. いいえ。お持ちの場合にのみ読み込まれますnew Validator()

このメソッドに静的にアクセスできるようにする場合は、を使用することを検討してSingletonください。

于 2012-06-27T21:20:56.630 に答える
1

そうではありません。validInputsはのインスタンスに関連付けられValidator、静的メソッド内からそれを参照することはできません。必要なのは静的ブロックです。

public final class Validator {
    private static HashSet validInputs;

    private Validator() {}

    static {
        //read in
    }

    public static boolean validate(String in) {


     //check and return
    }
}

このようにすると:

When will the class read in the text file? -  When the class is loaded by the Class loader.
Will Validator read the text file every time I call the function validate()? -  No, only when the class is loaded.
于 2012-06-27T21:18:24.843 に答える
1

シングルトンと非静的メソッド validateを使用できます。

public class Validator {
    private static Validator instance = null;

    /**
     * Do not use new Validator; use Validator.getInstance() instead.
     */
    private Validator() {
        // read in
    }

    public static Validator getInstance() {
        if(instance == null) {
            instance = new Validatorr();
        }
        return instance;
    }

    public boolean validate(String str) {
        // check and return
    }
}

validate何かを使用する必要がある場所:

Validator.getInstance().validate()

注:この方法で実装されたシングルトンパターンの副作用は、バリデーターが使用されていない場合、バリデーターが作成されin、読み取られないことです。これはあなたが望むものかもしれないし、そうでないかもしれません。

于 2012-06-27T21:38:23.697 に答える