具有强制数组大小参数的Java方法?

Bro*_*olf 5 java architecture class

我想为Java类创建一个接受3个参数的初始化方法:

Employee[] method( String[] employeeNames, Integer[] employeeAges, float[] employeeSalaries )
{
    Employee myEmployees[] = new Employee[SIZE];// dont know what size is

    for ( int count = 0; count < SIZE; count++)
    {
        myEmployees[count] = new Employee( employeeNames[count], employeeAges[count], employeeSalaries[count] );
    }
    return myEmployees;
}
Run Code Online (Sandbox Code Playgroud)

您可能会注意到此代码是错误的.SIZE变量未定义.我的问题是我想传入3个数组,但我想知道我是否可以确保三个数组都是相同的数组大小.这样for循环不会失败,因为for循环中的构造函数使用数组的所有参数.

也许Java有一个不同的功能,可以强制解决我的问题.我可以接受另一个名为SIZE的参数,该参数将在for循环中使用,但如果参数1和2的大小为10且第3个参数是大小为9的数组,则不能解决我的问题.

所以,只是为了改变,我不清楚.如何强制执行3个参数是包含完全相同数量元素的所有数组?

使用指定数组大小的额外参数不是很优雅而且很脏.它也没有解决数组参数包含不同大小的数组的问题.

Jon*_*eet 17

您无法在编译时强制执行此操作.您基本上必须在执行时检查它,并在不满足约束时抛出异常:

Employee[] method(String[] employeeNames,
                  Integer[] employeeAges,
                  float[] employeeSalaries)
{
    if (employeeNames == null
        || employeeAges == null 
        || employeeSalaries == null)
    {
        throw new NullPointerException();
    }
    int size = employeeNames.length;
    if (employeesAges.length != size || employeeSalaries.length != size)
    {
        throw new IllegalArgumentException
            ("Names/ages/salaries must be the same size");
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

  • 我使用NullPointerException来遵循Effective Java第2版第60项中所示的约定.要做得非常正确,我会对每个参数使用单独的检查,所以我可以输入正确的名称 - 但我想保持代码简短这个例子:) (4认同)
  • 这是我认为使用NullPointerException的错误方法的一个很好的例子.我会对每个传递的参数进行单独检查if(employeeNames == null){throw new IllegalArgumentException("employeeNames == null"); 这使堆栈跟踪更有助于诊断问题. (3认同)
  • 同样在NullPointerException上.引用javadoc时,NullPointerException为"在需要对象的情况下,当应用程序尝试使用null时抛出".IllegalArgumentException是"抛出以指示方法已被传递非法或不适当的参数." 在这种情况下,null数组显然是非法的参数.它没有被访问. (2认同)