我正在处理数独求解应用程序,我不想编写代码,例如
Method(int[] i)
{
if(i.length == 9)
{
// do stuff
}
else
{
// throw...
}
}
有没有办法通过使用注释(如
)将数组参数强制为精确的9整数Method(@SizeNine int[] i)
{
//do stuff
}
答案 0 :(得分:1)
您无法在数组上强制执行(长度不是Java中数组类型的一部分,与其他语言不同)。
但是,您可以定义这样的类:
final class IntArrayWithLength9 { // Obv you can use a better name.
private final int[] arr = new int[9];
void set(int i, int value) { arr[i] = value; }
int get(int i) { return arr[i]; }
}
现在,您知道如果您有这个类的实例,那么该数组的长度为9,因此您无需检查它。
因此,您现在可以使用IntArrayWithLength9
代替int[]
。
答案 1 :(得分:0)
是的,这是可能的,使用编译器插件。
使用@ArrayLen
注释声明一个方法,其参数必须是长度为9的字符串数组:
void myMethod(String @ArrayLen(9) [] a) {
...
}
然后,使用Index Checker的Checker Framework编译您的程序:
javac -processor index MyJavaFile.java
现在,如果任何客户端尝试传递长度不能保证为9的数组,javac将发出编译时警告。如果有警告,您可以修复它并重新编译。无需在实现中对数组长度执行运行时检查。