【问题标题】:Array of ArrayLists Null Pointer ExceptionArrayLists 数组空指针异常
【发布时间】:2013-02-07 03:51:41
【问题描述】:

我在以下代码中遇到空指针异常(较大程序的一部分 - 在调用“add”的行上抛出异常)。

public class A
{
    static ArrayList<Integer> sets[];
    public static void main(String[] args)
    {
         sets = new ArrayList[5];
         sets[0].add(1);
    }
}

我也不明白为什么编译器要求我将任何类级变量设为静态(例如 ArrayList)。据我所知,这些东西不应该在静态上下文中(就编码实践而言,而不是编译器问题),但编译器需要它。

提前致谢。

【问题讨论】:

    标签: java arrays arraylist nullpointerexception


    【解决方案1】:
     sets = new ArrayList[5];
    

    null 仅占 5 个位置

    在进行add() 调用之前,您需要为每个位置显式设置ArrayList()

    例子:

    sets[0] = new ArrayList<Integer>();
    sets[0].add(5);
    

    【讨论】:

      【解决方案2】:

      线

      sets = new ArrayList[5];
      

      分配数组,但不在数组的任何元素中放置 ArrayList。

      你需要

      sets[0] = new ArrayList<Integer>();
      sets[0].add(1);
      

      【讨论】:

        【解决方案3】:

        这是因为你的数组是用null 值初始化的。

        //it will initialize sets variable
        sets = new ArrayList[5];
        //but set[0], set[1]... and on are null
        

        您也应该在使用数组项之前对其进行初始化

        sets[0] = new ArrayList<Integer>();
        sets[0].add(1);
        

        此外,为了更好的设计,您应该面向接口而不是类进行编程。请参阅What does it mean to "program to an interface"? 了解更多信息。

        简而言之,你的代码应该是这样的

        public class A {
            static List<Integer> sets[];
            public static void main(String[] args) {
                sets = new List[5];
                sets[0] = new ArrayList<Integer>();
                sets[0].add(1);
                //extending your code in order to use more than one value of the List array
                sets[1] = new ArrayList<Integer>();
                sets[1].add(20);
                for(List<Integer> list : sets) {
                    if (list != null) {
                        System.out.println(list.get(0));
                    }
                }
            }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-01-30
          • 1970-01-01
          • 2013-01-30
          • 2013-03-22
          • 1970-01-01
          • 2013-01-18
          • 1970-01-01
          相关资源
          最近更新 更多