2014-01-27 3 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 Coding :)

+0

Спасибо, но идея «договорная длина» или гарантия длины, выходящей за рамки метода. Подумайте об этом как «Этот метод гарантированно возвращает объект типа' x' », но также включает длину. Конечно, я могу решить это в своем собственном коде, но это меньше ... безопасно, я хочу сказать. Использование объекта класса в конечном итоге стало более понятным. – Rogue

Смежные вопросы