我想尝试将一个“契约”或某种类型的基础分配给一个方法,该方法将保证从方法返回的数组的长度始终为x
长度。
在伪java中,这将是惊人的:
public String[4] someMethod() {...}
然而,这似乎在语法上并不正确。我的想法是创建一个@interface
来保证这一点:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface ArrayLength {
public int size() default 0;
}
//...
@ArrayLength(size = 4)
public String[] someMethod() {...}
但目前这只是一个肤浅的解决方案。有没有办法生成一个保证数组长度的简单方法(没有运行异常),可能通过编译器/ IDE警告,或者这在Java中目前不可能?
作为奖励,如果有一种方法可以通过netbeans(我的IDE)简单地生成警告,然后在编译时删除多余的内容,那就太棒了。
答案 0 :(得分:0)
package com.project.stock.testArray;
public interface ILen {
String GET_ARRAY = "getArray";
public String[] getArray(String arr[]);
}
package com.project.stock.testArray;
/**
* @author Bhaskar
*/
public class ComputeLength implements ILen {
/*
* Desciption: Method checks for the length of the input array and returns
* it.
*
* @see com.project.stock.testArray.ILen#getArray(java.lang.String[])
*/
public String[] getArray(String arr[]) {
// Returns if the input array is of length 4.
if (arr.length == 4) {
for (String str : arr) {
System.out.println(str);
}
return arr;
}
// Returns if the input array is of length greater than 4 and checks if
// each for string.
else if (arr.length > 4) {
String[] arr_copy = new String[4];
for (int i = 0; i < arr.length - 1; i++) {
if (i >= 4) {
break;
} else {
if (arr[i].matches("[a-zA-Z]*")) {
arr_copy[i] = arr[i];
}
}
}
for (String str : arr_copy) {
System.out.println(str);
}
return arr_copy;
} else {
System.out.println("Length" + arr.length);
String[] arr_duplicate;
arr_duplicate = arr.clone();
for (String str : arr_duplicate) {
System.out.println(str);
}
return arr_duplicate;
}
}
/**
* @param args
*/
public static void main(String[] args) {
ComputeLength obj = new ComputeLength();
String arr[] = new String[10];
arr[0] = "Name";
arr[1] = "Address";
arr[2] = "City";
arr[3] = "Country";
obj.getArray(arr);
}
}
希望这对你有所帮助。
我可以从你提到的内容中提取的是,你需要一个方法,它返回一个长度为4的字符串,带有各种输入。我试图用模拟对象设计相同的东西。代码认为字符串可以是任意长度,并返回输入数组中的前四个值,以防输入数组的长度超过4。 快乐编码:)