如何在静态方法中将其添加到arraylist?

时间:2010-12-04 00:10:06

标签: java methods static arraylist

我正在学习使用Java的绳索,而且我遇到了ArrayLists。我的程序的要点是获取一些用户输入参数,使用这些参数创建一个类Foo,然后将其添加到arraylist。问题是,它抱怨我无法从静态方法引用非静态类型。我可以在网上找到的唯一例子是将常量(“Cat”,“5.0”等)添加到arraylists中,这对我没有帮助。

我把我的代码的要点放在下面。我已经将arraylist移动​​到它自己的类Bar并添加了一个add方法,它只执行arraylist.add(foo),如果只是作为一个crapshoot使其工作(它没有)。我省略了循环,但它在定义后循环了很多次,因此arraylist被填充。

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 个答案:

答案 0 :(得分:1)

如果没有关于Bar的信息,或者它抱怨的实际错误,我们无能为力。

我认为它是因为Bar.add方法不是静态的,或者Bar不是静态的。

// 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(o);

答案 1 :(得分:1)

您有2个选项

选项1:创建Bar的实例并将foo添加到该实例。这是我的首选选项

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

选项2:使您的add(...)方法保持静态。这也意味着你的“列表”也应该是静态的。两者都不好。