簡體   English   中英

從方法實例化類變量 - Java

[英]Instantiate a class variable from a method - Java

我知道從方法實例化類變量不是一個好主意,但不幸的是,我面臨着沒有任何其他解決方案的情況。 我創建了一些自定義驗證器,並且我有一個對象( 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;
    }

}

用方法調用的數據填充對象不一定是反模式。 您的代碼中不正確的是方法validate ,它執行的驗證更多。 首先它初始化變量,然后驗證對象。 最好將它稱為populateAndValidate或從正文中刪除doInitialize並確保它由客戶端代碼調用。 rawField字段的空檢查可以是驗證過程的一部分。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM