Разбор параметров в подклассе перед вызовом конструктора суперкласса - PullRequest
2 голосов
/ 14 августа 2010
public Subclass(String[] parameters) throws IllegalArgumentException {
    super("Rectangle",
        Double.parseDouble(parameters[0]),
    Double.parseDouble(parameters[1]),
    90,
    Double.parseDouble(parameters[2]),
    Double.parseDouble(parameters[3]));
            if(parameters.length != 4) throw new IllegalArgumentException("bla, bla");
    if(parameters == null) throw new IllegalArgumentException("bla, bla");
}

Я бы хотел поместить эти 2 оператора if перед вызовом супер-конструктора. Я знаю, что не могу этого сделать, так каков безболезненный способ такого анализа параметров (бросая Exception) перед вызовом super()?

Ответы [ 2 ]

8 голосов
/ 14 августа 2010

Объявите метод проверки, взяв String[] и вернув его:

private static String[] validate(String[] param) {
    // do validation here
    return param;
}

И вызовите его при первом использовании param 1006 *

super("Rectangle", Double.parseDouble(validate(param).parameters[0]),

Этот трюк решает проблему быстро, ноКак заметил другой автор, иногда лучше реорганизовать ваш API (например, создать фабричный метод).

5 голосов
/ 14 августа 2010

Вы можете создать шаблон фабрики (например, abstract factory ), чтобы создать объект фабрики, из которого будут получены новые экземпляры.Затем метод фабричного класса для получения новых экземпляров может вызывать исключения неверных аргументов перед вызовом (частного) конструктора реального подкласса.

Вы также можете использовать шаблон Builder для проверки параметров перед созданиеми возвращение нового экземпляра.Вы создаете объект-конструктор (часто внутренний класс, чтобы он имел доступ к частному конструктору внешнего класса и т. Д.), Устанавливаете его свойства и вызываете метод build() - этот метод может затем выполнить любую необходимую проверку перед возвратом вамновый экземпляр.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...