Как добавить это к массиву в статическом методе? - PullRequest
0 голосов
/ 04 декабря 2010

Я изучаю веревки с помощью Java, и у меня возникли проблемы с ArrayLists. Суть моей программы состоит в том, чтобы взять некоторые пользовательские входные параметры, создать класс Foo с этими параметрами, а затем добавить его в массив. Проблема в том, что он жалуется, что я не могу ссылаться на нестатический тип из статического метода. Единственные примеры, которые я могу найти в Интернете, касаются добавления констант («Cat», «5.0» и т. Д.) К спискам массивов, что на самом деле мне не помогает.

Я изложил суть моего кода ниже. Я переместил arraylist в его собственный класс Bar и добавил метод add, который просто выполняет arraylist.add (foo), хотя бы в качестве крэпшута, чтобы он работал (он не работает). Я пропустил цикл, но он повторяется несколько раз после определений, так что массив данных заполняется.

public class MainClass{

public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
int a, b;

a = scanner.nextint();
b = scanner.nextint();

Foo foo = new Foo(a, b);
Bar.add(foo); //Complains here
}
}

Редактировать: Вот Бар явно

import java.util.ArrayList;
public class Bar{
private ArrayList list = new ArrayList();

public void add(Foo foo){
    list.add(foo);
}
}

Если это помогает, объект foo не изменяется после создания.

Как мне обойти это? Заранее спасибо за любую помощь.

Ответы [ 2 ]

1 голос
/ 04 декабря 2010

У вас есть 2 варианта

вариант 1: создать экземпляр Bar и добавить foo к этому экземпляру. Это мой предпочтительный вариант

Bar b=new Bar();
b.add(foo);

вариант 2: сделать метод add (...) статическим. это также означает, что ваш «список» также должен быть статическим. оба плохие.

1 голос
/ 04 декабря 2010

Без информации о Bar или о фактической ошибке, на которую он жалуется, мы не сможем помочь.

Я бы предположил, что метод Bar.add не является статическим, или Bar isnстатично

// a class with a public static method that encapsulates a static list
public class Bar
{
    static List<Foo> innerlist = new ArrayList<Foo>();

    public static void add( Foo o )
    {
        innerList.add(o);
    }
}

или вы хотите, чтобы "Bar" был статическим членом списка чего-то еще?

// a class with a static member
public class OtherClass
{
     public static List<Foo> Bar = new ArrayList<Foo>();
}

тогда вашему коду потребуется OtherClass.Bar.add(o) вместо просто Bar.add(о);

...