保证返回的数组长度

时间:2014-01-27 22:07:05

标签: java arrays

我想尝试将一个“契约”或某种类型的基础分配给一个方法,该方法将保证从方法返回的数组的长度始终为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)简单地生成警告,然后在编译时删除多余的内容,那就太棒了。

1 个答案:

答案 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。 快乐编码:)