2014-08-31 2 views
0

Я думал, что понял NullPointerException, но, видимо, нет. Это здесь выдает ошибку: (main класс)Почему объявления цепочки, за которыми следует создание экземпляра, вызывают исключение NullPointerException?

main.topicActionWeight.add(
    Float.parseFloat(this.actionGenreWeightCombo.getSelectedItem().toString())); 

TopicActionWeight список. Вот мое заявление о перечне:

public static List<Float> topicActionWeight, 
     topicAdventureWeight, 
     topicRPGWeight, 
     topicStrategyWeight, 
     topicSimulationWeight = new ArrayList<>(); 

Списки, которые я заявляю, не являются указателями, не так ли? Они созданы ..

Да, я попытался new ArrayList<Float>();

+0

вероятно 'getSelectedItem()' возвращает нуль. Или даже 'actionGenreWeightCombo' (это одна из причин, по которой я ненавижу вызовы цепочки функций, потому что вы никогда не сталкивались с такой ошибкой) –

+1

Прежде всего, в языке Java нет« указателей ». Однако все объекты обычно реализуются с использованием указателей. ** –

ответ

1

Выполнением ниже линии вы только объявляющий все соответствующие ArrayLists, но не инициализирует ни один из них, кроме topicSimulationWeight именно поэтому ваша topicActionWeight равна нулю и, следовательно, NPE.

public static List<Float> topicActionWeight, 
     topicAdventureWeight, 
     topicRPGWeight, 
     topicStrategyWeight, 
     topicSimulationWeight = new ArrayList<>(); 

Правильный способ инициализации является: -

public static List<Float> topicActionWeight = new ArrayList<>(); 
public static List<Float> topicAdventureWeight = new ArrayList<>(); 
public static List<Float> topicRPGWeight = new ArrayList<>(); 
public static List<Float> topicStrategyWeight = new ArrayList<>(); 
public static List<Float> topicSimulationWeight = new ArrayList<>(); 
+0

Спасибо! Мой «приятель кода» сказал мне, что это было намного быстрее и эффективнее, если я сделал это в одном «объявлении». – user3902017

+1

Возьмите все, что говорит ваш приятель с твердым оттенком. –

Смежные вопросы