2014-01-27 50 views
3

我想试图为一个方法分配一个“合约”或某种类型的基础,以保证从方法返回的数组长度总是有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

你想做什么?为什么/你怎么知道你的数组总是有4个元素? – Sbodd

+0

在上面的例子中,对于那个特定的方法,返回的数组将表示某种类型的数据(如果您愿意,则为数据的“格式”)。 – Rogue

+1

任何不是为大小为4的固定数组返回类型创建类的原因? – rainkinz

回答

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的长度。 Happy编码:)

+0

谢谢,但主意是“合同长度”,或者保证超出方法范围的长度。可以把它看作“这个方法保证返回类型'x''的对象,但也包括长度。当然,我可以在我自己的代码中解决这个问题,但这不是很安全,我想说。最终使用类对象更有意义。 – Rogue