假设您有以下课程:
public class MyClass {
public MyClass() {
}
}
我希望能够在构造函数中传递可定义数量的参数,如下所示:
public MyClass(int parameters, int /* "parameters" amount of integers here*/) {
}
我知道我可以使用省略号运算符,但是构造函数将接受比 int“参数”更多或更少的参数。有没有办法做到这一点?
假设您有以下课程:
public class MyClass {
public MyClass() {
}
}
我希望能够在构造函数中传递可定义数量的参数,如下所示:
public MyClass(int parameters, int /* "parameters" amount of integers here*/) {
}
我知道我可以使用省略号运算符,但是构造函数将接受比 int“参数”更多或更少的参数。有没有办法做到这一点?
您不能在 Java 编译器中强制执行此限制,但您可以通过抛出一个运行时强制它IllegalArgumentException
:
public MyClass(int numParameters, int... parameters) {
if (numParameters != parameters.length)
throw new IllegalArgumentException("Number of parameters given doesn't match the expected amount of " + numParameters);
// Rest of processing here.
}
这使用 Java 的可变参数功能来接受未知数量的参数。
注意:为了清楚起见,我稍微重命名了参数。
public MyClass(int parameters, int /* "parameters" amount of integers here*/) {
}
请参阅有关定义方法的链接:
括号中的参数列表 - 输入参数的逗号分隔列表,前面是它们的数据类型,用括号括起来,()
参数不会告诉您它期望多少数据,它会告诉您数据类型。
如果需要,可以在运行时检查构造函数中的数量:
if(parametersAmount != desiredAmount) ...
我猜测第一个参数将是一个命名常量,它区分不同的情况
new MyClass(CASE_ONE, p1);
您可以使用工厂方法
public static MyClass createCaseOne(int p1){ ... }
public static MyClass createCaseTwo(int p1, int p2){ ... }
public static MyClass createCaseThree(int p1, int p2, int p3){ ... }
...