开发者

Parsing parameters in subclass before calling constructor of the superclass

开发者 https://www.devze.com 2023-01-12 00:47 出处:网络
public Subclass(String[] parameters) 开发者_StackOverflow中文版throws IllegalArgumentException {
public Subclass(String[] parameters) 开发者_StackOverflow中文版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");
}

I would like to put these 2 if statements before calling super-constructor. I know that I can't do that, so what's the painless way to do that kind of parsing of parameters (throwing Exception) before calling super()?


Declare a validation method taking String[] and returning it:

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

And call it when using param first time

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

This trick solves problem quickly, but, as another poster noted, sometimes it's better to refactor your API (like creating a factory method).


You could create a factory pattern (for example an abstract factory) to create a factory object from which new instances are obtained. The factory class method to obtain new instances could then throw bad argument exceptions before calling the (private) constructor of the real subclass.

You could also use a Builder pattern to verify parameters before creating and returning a new instance. You create a builder object (often an inner class, so that it has access to the outer class's private constructor etc.), set its properties and call a build() method - that method can then do any verification you need before returning you a new instance.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号