我正在学习使用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在创建后不会更改。
我如何解决这个问题?提前感谢您的帮助。
答案 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(...)方法保持静态。这也意味着你的“列表”也应该是静态的。两者都不好。