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