【发布时间】:2011-05-20 01:27:14
【问题描述】:
我正在学习 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
}
}
编辑:这里是 Bar 明确
import java.util.ArrayList;
public class Bar{
private ArrayList list = new ArrayList();
public void add(Foo foo){
list.add(foo);
}
}
如果有帮助,对象 foo 在创建后不会更改。
我该如何解决这个问题?提前感谢您的帮助。
【问题讨论】:
-
为什么不显示所有不起作用的代码
-
是的,您的 gist 缺少 Bar 的声明和/或错误,所以它不是一个很好的 gist跨度>
-
已编辑;错误和我说的差不多; “不能从静态上下文中引用非静态方法 add(java.lang.Object)”
-
如果您的列表只包含一种类型的对象,您也应该考虑使用泛型,并将其声明为
private List<Foo> list = new ArrayList<Foo>(); -
这说明了为什么您应该始终准确地引用错误消息。您最初说“它抱怨我无法从静态方法引用非静态类型”,但后来您说错误是“无法从静态上下文引用非静态方法 add(java.lang.Object)” .非静态类型和非静态方法是有区别的。
标签: java methods static arraylist