-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);
...

我没有测试过代码,但我有两个问题:

  1. 它有效吗?是否读入了有效的输入文本文件?
  2. 类什么时​​候会读入文本文件?
  3. Validator每次调用该函数时都会读取文本文件validate()吗?
4

4 回答 4

5

它有效吗?是否读入了有效的输入文本文件?

不,那行不通。

您的方法应该是一个实例方法,以便它可以访问其他实例成员。

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

类什么时​​候会读入文本文件?

您必须先构建类,然后才能使用它。在构造函数中读取文本文件。


每次我调用函数 validate() 时,Validator 会读取文本文件吗?

不,构造函数在你调用时被调用new Validator()

于 2012-06-27T21:18:15.800 回答
1

validInputs不,在您创建Validatorusing实例之前,您将无法访问您的new Validator()

  1. 不,您的文件在使用时不会被读入。
  2. 当您创建Validator.
  3. 不会。只有当您拥有 时才会读入new Validator()

如果您希望能够静态访问此方法,请考虑使用Singleton.

于 2012-06-27T21:20:56.630 回答
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 回答
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 回答