【问题标题】:Guarantee a returned array's length保证返回数组的长度
【发布时间】:2014-02-18 23:46:38
【问题描述】:

我想尝试为方法分配“合同”或某种类型的基础,以保证从方法返回的数组长度始终具有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)简单地生成警告,然后在编译时删除多余的警告,那就太好了。

【问题讨论】:

  • 你想做什么?为什么/你怎么知道你的数组总是有 4 个元素?
  • 在上面的例子中,对于那个特定的方法,返回的数组将代表某种类型的数据(如果你愿意的话,数据的“格式”)。
  • 有什么理由不为大小为 4 的固定数组的返回类型创建一个类?
  • 是的,创建一个新类来包装一个长度为 4 的字符串数组似乎有点矫枉过正,但不幸的是,这是首先想到的。
  • 使用新类可能是正确的解决方案。如果这 4 个 String 元素代表了一些领域概念,那么一个新的类绝对是正确的解决方案。

标签: java arrays


【解决方案1】:
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。 快乐编码:)

【讨论】:

  • 谢谢,但这个想法是“合同长度”,或者保证方法范围之外的长度。可以将其想象为“此方法保证返回类型为x 的对象”,但还包括长度。当然我可以用我自己的代码解决这个问题,但它不那么......我想说的是安全。最后使用类对象更有意义。
猜你喜欢
  • 1970-01-01
  • 2013-12-10
  • 1970-01-01
  • 2014-10-10
  • 1970-01-01
  • 2023-03-06
  • 2015-07-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多