我有一个公共(public)构造函数,它采用一个参数 (int age) 来创建一个对象。我想检查传递的参数是否合法,例如年龄不能为负数。如果它是非法的,则不要创建对象/实例。如果合法,没问题。
我只能想到一种方法 -
将构造函数设为私有(private)。创建一个带有参数 (int age) 的静态方法来进行所有检查,如果您向它传递非法值,则返回 null。如果你传递给它一个合法的值,那么创建一个对象并返回它的引用。 还有其他方法吗?也许来自构造函数本身?
编辑: 我想到了上述方法的一个问题。出于显而易见的原因,工厂方法/对象创建者方法只能是静态方法。如果工厂方法必须访问成员变量(进行一些检查) 以创建对象,会发生什么情况?然后,我们将被迫将该成员变量设为静态。这可能并非在所有情况下都可以。
有意义吗?
最佳答案
Is there any other way of doing it ? Maybe from inside the constructor itself ?
是的。我建议从构造函数中抛出一个Exception
public class Person
{
int age;
public Person(int age) throws Exception
{
if(age <= 0)
{
throw new Exception("Age is not allowed");
}
// Do some stuffs
this.age = age;
}
}
编辑:
您也可以按照 Till Helge Helwig 的建议使用 IllegalArgumentException
public class Person
{
int age;
public Person(int age) throws IllegalArgumentException
{
if(age <= 0)
{
throw new IllegalArgumentException("Age is not allowed");
}
// Do some stuffs
this.age = age;
}
}
关于java - 如果构造函数的参数非法,则阻止类的实例化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14394590/