在对象构造函数中抛出异常

时间:2014-08-15 19:06:38

标签: java exception constructor

让我说我有这段代码:

public class MyClass {

    public final static int valueA = 0;
    public final static int valueB = 1;

    private int parameter = -1;

    public MyClass(int parameter) {

        if(parameter != valueA && parameter != valueB) {
            throw new IllegalArgumentException("Exception description here");
        }

        this.parameter = parameter;
    }

}

这是最佳做法吗?或者是否有更好的方法来承认,无论构造函数传递的值是什么,它都具有与其中一个变量相同的值?

2 个答案:

答案 0 :(得分:6)

也许你应该研究Enum s。

public enum MyEnum {

    A(0),
    B(1);

    private int parameter;

    public MyEnum(int parameter)
    {
        this.parameter = parameter;
    }

}

基本上,这会强制您只能拥有parameter = 0parameter = 1的对象。但是,这也只允许每种类型的一个实例(0,1等等),因此根据您的使用情况,这可能不起作用。

答案 1 :(得分:6)

Java API包含许多在其构造函数中抛出异常的类,因此没有任何问题。

示例:

java.net.URI课程中:

public URI(String str) throws URISyntaxException {
    new Parser(str).parse(false);
}

java.util.ArrayList课程中:

public ArrayList(int initialCapacity) {
    super();
    if (initialCapacity < 0)
        throw new IllegalArgumentException("Illegal Capacity: "+
                                           initialCapacity);
    this.elementData = new Object[initialCapacity];
}
相关问题