简体   繁体   中英

Parsing parameters in subclass before calling constructor of the superclass

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");
}

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM