2012-01-27 7 views
-2

Я хотел бы вернуть arraylist из метода non-class в java, я искал вокруг, но ничего не нашел.Как вернуть arraylist?

{ 
    int d=e.length(); 
    ArrayList list2 = new ArrayList(); 
    for (int i=0;i<d;i++) 
    { 
     list2.add('_'); 
    } 
    return list2; 
} 

Спасибо большое!

+0

Похоже, вы возвращаете его уже в своем коде. В чем проблема? –

+3

Что такое * метод non-class * в Java? Каждый метод в Java принадлежит классу. –

+0

Неклассовый метод? Просьба уточнить. Вы имеете в виду статический метод? И где подпись метода? – Jules

ответ

1

Все, что вам нужно сделать, это положить возвращаемый тип в подписи, а затем вернуть список

public class Example { 
    // a static method 
    public static List someStaticMethod(){ 
     // create and return a List 
    } 

    // this method is not static 
    public List someMethod(){ 
     // create and return a List 
    } 

} 

Обратите внимание, что из-за ArrayList расширяет List вы можете сделать тип возвращаемого значения либо один из них.

List более общий, вы можете вернуть любой тип. Это полезно, потому что если вы хотите изменить внутренний список, который вы используете (скажем, изменить с ArrayList на LinkedList), вам не придется менять API везде, где вы используете этот метод.

Однако, если вы используете реализацию списка, которая имеет свои собственные методы, которые не определены интерфейсом List, вы не сможете получить доступ к этим методам, когда вы получите список обратно из вашего метода, если только вы не выполняете листинг (ewe) или указать точный тип возврата.

+0

У меня пока нет возможности проверить это, но я считаю, что он работает. FYI, в моем вопросе была некоторая ошибка, и я удивлен, что мне все же удалось получить правильный ответ. Большое спасибо! –

2

Все методы должны быть либо статическими, либо экземплярами; принадлежащих классу или одному из его экземпляров. Это не похоже на C или C++, где вы можете иметь функции, которые находятся вне класса в целом.

Однако вы можете сделать статический импорт.

public class UtilClass { 
    public static ArrayList getList() { ... return someList; } 
} 

import static UtilClass.getList; 

Это позволит вам более или менее относиться к этому так. Однако оно должно быть определено как как часть класса и быть статичным.

EDIT: Я забыл сделать getList статическим в примере.

+0

Предположительно, метод getList() должен быть объявлен статическим, чтобы это работало? – Andy

0

Ваш код выглядит как groovyclosure - может быть, вы должны попробовать это вместо этого.

+0

извините, погрешность есть. Я имел в виду не основной класс. –

0

Ваше определение метода должно быть примерно таким.

public ArrayList<Character> getCharList(String e) 
{  
    int d = e.length(); 
    // as of Java 1.5, generic collections are available 
    ArrayList<Character> list2 = new ArrayList<Character>(); 
    for (int i=0;i<d;i++) { 
     list2.add(new Character('_')); 
    } 
    return list2; 
} 

Я предположил, что вы вызывали метод length() для строки. Приспосабливайтесь к своей ситуации.

Чтобы потом получить список, сделайте следующее:

String e = "a string"; 
ArrayList<Character> myList = myClass.getCharList(e); 
0

Любой метод, который не void может возвращать любой тип данных, однако, вы можете вернуть только типы метод позволяет. Например, метод, начинающийся с public int, может возвращать только значение int. Чтобы вернуть ArrayList, метод должен включать ArrayList в декларации, например так:

public ArrayList thisReturnsAnArrList(ArrayList list) { 
    return list; //'list' is of the type 'ArrayList' 
} 

Однако, вы можете быть более мягким и есть способ вернуть List. Поскольку несколько классов наследуются от List (то есть ArrayList и LinkedList), вы можете вернуть любое значение, которое расширяет List.

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