验证提供给构造函数的值的最佳实践?

sfy*_*fyn 2 java

上下文:我正在为学校写一个信号量类,其中一个要求是它可能没有用负值初始化.

现在我的构造函数抛出异常:

/**
 * Constructor
 */
public Semaphore(int value) throws Exception
{   
    if (value < 0)
        throw new Exception("Negative value provided for initial constructor.");
    this.value = value;
}
Run Code Online (Sandbox Code Playgroud)

处理异常以实例化信号量对我来说似乎过于沉重,所以我正在考虑将任何负值静默设置为零,即:

/**
 * Constructor
 */
public Semaphore(int value) 
{   
    if (value < 0)
        this.value = 0;
    else
        this.value = value;
}
Run Code Online (Sandbox Code Playgroud)

Ale*_*erc 8

你应该使用IllegalArgumentException相反的.它不需要显式异常处理,它的行为与您想要的完全相同,即发出非法参数信号.