如果提供了某些参数,是否可以禁止创建类对象?

时间:2014-05-09 01:08:34

标签: java class object constructor

如何限制用户创建具有特定变量值的对象?换句话说,如果某个类具有变量a,b和c,则只应在c的值是某一组值的一部分时创建该类。如果c的值不在该组值中,则只是阻止创建该类对象。这是参考Java。

2 个答案:

答案 0 :(得分:3)

是的,您只需在构造函数中抛出异常即可。如果您只是简单地创建一个警卫声明以防止某人提供不良论据,那就没问题了。

public MyClass(int a, int b, int c)
{
    if(c != 1 && c != 2)
        throw new ArgumentException(...);
    ...
}

但是如果调用代码在尝试构造对象之前想要知道参数是否有效,那么最好使用某种Builder类来验证参数,并允许您以编程方式知道是否存在'事先会成为一个问题。

答案 1 :(得分:2)

如果您不想创建一个甚至检查其有效性的对象,请尝试通过同一个类的静态方法创建一个实例,该方法在返回一个对象/调用构造函数之前检查允许的参数(这是私有的) )。

public class Test {

private String a;
private static final ArrayList<String> allowed_a = new ArrayList<>
                                        (Arrays.asList("a1", "a2", "a2"));
private Test(String a){
    this.a = a;
}

public static Test getObject(String poss_a){
    if(allowed_a.contains(poss_a))
    {
        return new Test(poss_a);
    }
    return null;
}

然后将按如下方式创建该类的对象:

public static void main(String[] args) {

    Test object1 = Test.getObject("invalid_a");
    Test object2 = Test.getObject("a1");

    if (object1 == null) {
        System.out.println("Object1 could not be created.");
    }
    else{
        System.out.println("Object1 was successfully created.");
    }

    if (object2 == null) {
        System.out.println("Object2 could not be created.");
    }
    else{
        System.out.println("Object2 was successfully created.");
    }
}    

运行时返回以下输出:

run:
Object1 could not be created.
Object2 was successfully created.