4

假设您有以下课程:

public class MyClass {

    public MyClass() {
    }
}

我希望能够在构造函数中传递可定义数量的参数,如下所示:

    public MyClass(int parameters, int /* "parameters" amount of integers here*/) {
    }

我知道我可以使用省略号运算符,但是构造函数将接受比 int“参数”更多或更少的参数。有没有办法做到这一点?

4

3 回答 3

5

您不能在 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 的可变参数功能来接受未知数量的参数。

注意:为了清楚起见,我稍微重命名了参数。

于 2013-04-22T18:50:52.440 回答
1

public MyClass(int parameters, int /* "parameters" amount of integers here*/) { }

请参阅有关定义方法的链接

括号中的参数列表 - 输入参数的逗号分隔列表,前面是它们的数据类型,用括号括起来,()

参数不会告诉您它期望多少数据,它会告诉您数据类型

如果需要,可以在运行时检查构造函数中的数量:

if(parametersAmount != desiredAmount) ...

于 2013-04-22T18:48:57.493 回答
0

我猜测第一个参数将是一个命名常量,它区分不同的情况

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){ ... }

...
于 2013-04-22T19:11:55.537 回答