java/processing возвращает ArrayList throws: этот метод должен возвращать результат Type ArrayList

У меня есть эта функция makeAirportManagers(), которая должна возвращать ArrayList <MarkerManager> все необходимые переменные map, countryMarkers и airportMarkers являются глобальными (грязный стиль обработки).

ArrayList  makeAirportManagers(){
  ArrayList  managers = new ArrayList();
  for (Marker country : countryMarkers){
    MarkerManager currentMarkerManager = new MarkerManager();
    for (Marker airport : airportMarkers){
      Location airportLocation = airport.getLocation();
      ScreenPosition airportScreenPos = map.getScreenPosition(airportLocation);
      if(country.isInside(map, airportScreenPos.x, airportScreenPos.y)){
        currentMarkerManager.addMarker(airport);
      }
    }
    currentMarkerManager.disableDrawing();
    managers.add(currentMarkerManager);
    map.addMarkerManager(currentMarkerManager);
    airportManagersBuild = true;
    return managers;
  }
}

Консоль выводит: Этот метод должен возвращать результат типа ArrayList.

И действительно не знаю почему!

В другой версии кода я подсчитываю элементы managers, чтобы убедиться, что он не пустой, и он получает 178 элементов, как и ожидалось.

Я использую Processing 1.5.1 из-за библиотеки Unfolding, с которой я играю.


person PDXIII    schedule 06.11.2012    source источник


Ответы (2)


Ваш метод return находится внутри цикла for. Вы должны переместить его на одну строку ниже.

person Dan D.    schedule 06.11.2012
comment
Я так слеп! Большое спасибо! - person PDXIII; 06.11.2012

Если в countryMarkers нет элемента, вы никогда не дойдете до строки return managers и ваш метод ничего не вернет.

Даже если вы знаете, что ваш контейнер никогда не будет пустым, компилятор Java этого не знает. Таким образом ваша ошибка.

person Jerome    schedule 06.11.2012
comment
Спасибо, но countryMarkers не пусто. - person PDXIII; 06.11.2012
comment
Ты знаешь что. Не ваш компилятор. Ваш компилятор правее вас или меня - person Jerome; 06.11.2012