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

daz*_*ito 1 java constructor exception

让我说我有这个代码:

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

}
Run Code Online (Sandbox Code Playgroud)

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

Hyp*_*ino 6

也许你应该研究一下Enum.

public enum MyEnum {

    A(0),
    B(1);

    private int parameter;

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

}
Run Code Online (Sandbox Code Playgroud)

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


Era*_*ran 6

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

示例:

java.net.URI课堂上:

public URI(String str) throws URISyntaxException {
    new Parser(str).parse(false);
}
Run Code Online (Sandbox Code Playgroud)

java.util.ArrayList课堂上:

public ArrayList(int initialCapacity) {
    super();
    if (initialCapacity < 0)
        throw new IllegalArgumentException("Illegal Capacity: "+
                                           initialCapacity);
    this.elementData = new Object[initialCapacity];
}
Run Code Online (Sandbox Code Playgroud)