【问题标题】:Java ArrayList of objects' add() method not working对象的 Java ArrayList 的 add() 方法不起作用
【发布时间】:2013-10-31 21:40:12
【问题描述】:

我是 JAVA 新手,我面临初学者的问题,我知道 :-P

IN PLAIN ENGLISH => 我正在尝试创建对象的 ArrayList,并在需要时在数组中添加新对象。

好的,这是我的代码的精简版

package ACP.Employee;   //created package
import java.util.ArrayList;     //imported arraylist class
import ACP.Employee.EmployeeClass;  //imported employee class of same package

public class ClientClass
{
    ArrayList<EmployeeClass> empArray = new ArrayList<EmployeeClass>(); //created a new Array List

    public static void main (String[] args)
    {
        int objcount = 0;   //variable to store objct count

        empArray.add(objcount, EmployeeClass obj);
    }
}

IDE (Eclipse) 在 empArray.add

上给了我以下错误
  • 无法对非静态 empArray 进行静态引用
  • EmployeeClass 无法解析为变量
  • 令牌 obj 语法错误,删除此令牌。

我也尝试用以下语法替换该行,

empArray.add(new EmployeeClass());

但是以下错误仍然存​​在。

  • 无法对非静态 empArray 进行静态引用

请帮帮忙,我看过 ArrayList 的 add() 方法的 API Spec,如下:::

void add(int index, Object element) ==>> 在列表中指定位置索引处插入指定元素 boolean add(Object o) ==>> 将指定元素附加到此列表的末尾。 源 (http://www.tutorialspoint.com/java/java_arraylist_class.htm)

【问题讨论】:

  • empArray 变量的声明前面放一个static。像这样:static ArrayList&lt;EmployeeClass&gt; empArray = new ...
  • empArray 是类的成员,main 是静态成员,所以,这是禁止的
  • 静态方法不能访问非静态成员。
  • 好的,成功了。好的。!但我仍然对这里的概念感到困惑。对不起,伙计们,请不要生气:-P

标签: java oop arraylist


【解决方案1】:

通过static 方法,您只能访问static 字段。
通过not-static 方法,您可以访问所有字段。
例如

private int i = 0;
private static int j = 0;

public void increment()
{
   i++; // correct
   j++; // correct
}
public static void staticIncrement()
{
   i++; // compilation error
   j++; // correct
}  

因此,在您的示例中,empArray 应该是 static

public class ClientClass
{
    static ArrayList<EmployeeClass> empArray = new ArrayList<EmployeeClass>(); 

    public static void main (String[] args)
    {
       int objcount = 0;   //variable to store objct count

       empArray.add(objcount, new EmployeeClass());
       empArray.add(new EmployeeClass());
    }
}

【讨论】:

    【解决方案2】:

    您的代码存在两个问题。

    1. 您正试图从静态上下文(主)访问ClientClass 类的成员。仅当该成员是静态的时才有可能。由于empArray 没有modifiers,它将默认为非静态的包私有。您要么必须通过将其声明为静态来使其在静态上下文中可访问:

      static ArrayList&lt;EmployeeClass&gt; empArray = new ArrayList&lt;&gt;();

      或者创建一个ClientClass的实例并访问它的成员

      ArrayList<EmployeeClass> empArray = new ArrayList<EmployeeClass>();
      
      public static void main(String[] args) {
          ClientClass t = new ClientClass();
          t.empArray.add(new Employee());
      
      }
      
    2. 将员工传递到要添加的列表的方式在 java 中无法编译。这是关于如何在 java 中创建对象的good tutorial。实际上,您似乎是 Java 新手,因此我建议您从教程的第一页开始,它们非常有助于快速熟悉该语言,并且您很快就会变得高效。

    【讨论】:

    • 感谢您的详细说明。但至于第二点,编译器正在编译我的代码而没有任何错误。我也没有看到我的声明有任何问题,因为简单来说,我正在创建类型为“EmployeeClass”的 ArrayList。为什么不应该呢?正如我所读到的, ArrayList => 其中 T 是模板(可以容纳任何数据类型)。
    猜你喜欢
    • 2017-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-08
    • 2015-07-12
    • 1970-01-01
    • 2012-04-19
    相关资源
    最近更新 更多