【问题标题】:我可以使用固定大小的数组参数声明 Java 方法吗?
【发布时间】:2022-01-23 13:50:21
【问题描述】:
在 C++ 中,我认为 possible 使用具有固定大小的输入数组对函数进行原型设计。我也可以对一般的 java 方法执行此操作吗?
此外,int[10] 与 int[20] 的类型是否不同(可能出于重载目的)?
【问题讨论】:
标签:
java
arrays
syntax
overloading
【解决方案1】:
正如albjerto's answer 和 cmets 所述,Java 没有提供编译时语法来区分不同大小的数组参数(尽管在该答案状态下,您可以在运行时检查它)。
对于这个要求,我能想到的唯一(可怕的)编译时安全选项是解开数组并将其元素作为单独的参数传递。例如:
// so-called int[2] variant:
public void myMethod(int arg1, int arg2) {
// Do something with the arguments
// If you actually need an array, you could do:
int[] arr = {arg1, arg2};
}
// so-called int[3] variant:
public void myMethod(int arg1, int arg2, int arg3) {
// Your logic here...
}
// etc
对于较大的数组,这将很快变得非常麻烦,但对于较小的数组,它可能是一个有效的选择。
【解决方案2】:
不,您不能强制方法参数的数组大小。
但是,如果您有一个具有固定数量参数的数组,我想知道您是否有一个明确定义的对象类型(例如 3-D 笛卡尔坐标),因此您可以声明这样一个对象(例如Point3D),将其用作参数,并且显然强制键入。
【解决方案3】:
实际上你不能,但你仍然可以实现这样的东西,
对于布尔返回函数,
static boolean fixedArrayFuncBool(int[] arr, int lengthOfArray) {
if (arr.length == lengthOfArray) {
return true;
} else {
return false;
}
}
对于整数返回函数,
static int fixedArrayFuncInt(int[] arr, int lengthOfArray) {
if(arr.length == lengthOfArray) {
return lengthOfArray;
}
else {
return -1;
}
}
这些函数只是检查给定的数组是否是你给的长度,并根据它返回值。