Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从方法实例化一个类变量-Java_Java_Design Patterns - Fatal编程技术网

从方法实例化一个类变量-Java

从方法实例化一个类变量-Java,java,design-patterns,Java,Design Patterns,我知道从一个方法实例化一个类变量不是一个好主意,但不幸的是,我面临一个没有任何其他解决方案的情况。我已经创建了一些自定义验证器 我有一个对象rawField,其中填充了来自GUI的一些信息。为了填充该实例变量,我使用javax.faces.Validator中的validate方法 因此,我通过此事件从GUI获取每个字段的信息 我的问题是:这是一个好的设计模式吗?有谁对如何实例化这个变量有更好的想法吗 父类: public abstract class FormFieldValidator e

我知道从一个方法实例化一个类变量不是一个好主意,但不幸的是,我面临一个没有任何其他解决方案的情况。我已经创建了一些自定义验证器 我有一个对象rawField,其中填充了来自GUI的一些信息。为了填充该实例变量,我使用javax.faces.Validator中的validate方法

因此,我通过此事件从GUI获取每个字段的信息

我的问题是:这是一个好的设计模式吗?有谁对如何实例化这个变量有更好的想法吗

父类:

 public abstract class FormFieldValidator extends BaseValidator implements IFormFieldValidator, Validator {

            protected RawField rawField;

            @Override
            public abstract RawField doInitialize(Object inputObject);

            @Override
            public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {

            rawField = doInitialize(value);

            if (rawField == null) {

                throw new IllegalArgumentException("The field cannot be empty");

            }

            doBasicValidation();
            }
    }
儿童班

@FacesValidator(Constants.Validators.USERNAME_VALIDATOR)

public class UsernameValidator extends FormFieldValidator {

    @Override
    public RawField doInitialize(Object guiField) {

    ValidationConditions validationConditions = new ValidationConditions

        .Builder(Entities.ParamsSize.USERNAME_MIN_LENGTH, Entities.ParamsSize.USERNAME_MAX_LENGTH)

            .setRegex(Constants.Regex.USERNAME_REGEX).setNullable(false).setUnique(true).build();


    FieldDetails fieldDetails = new FieldDetails(guiField, "Username");

    RawField rawField = new RawField(fieldDetails, validationConditions);

    return rawField;
    }

}

在方法调用时用数据填充对象不一定是反模式。您的代码中不正确的地方是方法验证,这会导致更多的验证。它首先初始化变量,然后验证对象。最好将其称为populateAndValidate,或者从主体中删除doInitialize,并确保它由客户机代码调用。rawField字段的空检查可以作为验证过程的一部分。

谢谢您的回答。当您说客户端代码必须调用doInitialize时,您的意思是什么?