将元素添加到空ArrayList <t>

时间:2017-12-07 20:51:05

标签: java arraylist sonarlint

我将对象添加到在每个循环中初始化为null的ArrayList中,但是SonarLint给了我一个&#34; NullPointerException&#34;当我尝试添加每个对象时可能会抛出。为什么要指出这个错误?

public List<SatelliteData> getData()
  {
    SatelliteData satellite;
    ArrayList<SatelliteData> satelliteList = null;

    try(FileInputStream file = new FileInputStream(satelliteOutputFile))
    {
      TLEParser parsedFile = new TLEParser();
      List<TLE> tleList = parsedFile.readFile(file);

      for (TLE tle : tleList)
      {
        satellite = new SatelliteData(tle);
        satellite.collectSatelliteData();

        satelliteList.add(satellite); //A "NullPointerException" could be thrown; "satelliteList" is nullable here
      }

    }
    catch (IOException ex)
    {
      LOGGER.error("IO Exception: " +  ex);
      notifyTheObservers("IO Exception: " + ex);
    }

    return satelliteList;
  }

1 个答案:

答案 0 :(得分:1)

您不应该对已初始化为nothing / null的变量调用成员方法。

在这种情况下你有

ArrayList<SatelliteData> satelliteList = null;

此变量没有分配任何内存。

  

此时你的电脑知道:好的,还有什么东西   称为satelliteData ,但它实际上不知道它在哪里?

在其上调用add()方法,可能会抛出 NullPointerException ,因为此变量是指向null / nothing的引用。

为了解决这个问题,你需要像这样初始化变量:

ArrayList<SatelliteData> satelliteList = new ArrayList<SatelliteData>();
  

此时,您的计算机创建了satteliteData并且知道   确切地说它存在于哪里因此它可以愉快地操作它。

这会为这个变量分配一些内存,现在它有自己可以调用的方法。