очень специфические Java-конструкторы и проблема класса объекта - PullRequest
0 голосов
/ 26 сентября 2011

У меня есть массив в actionTable.get (состояние). Когда я иду, чтобы добавить объект в массив, а именно Reduce, свойства Reduce, кажется, не идут с ним. Массив имеет тип Action [], где Action является суперклассом Reduce, может ли это быть причиной?

Добавление приведения к массиву:

actionTable.get(state)[t] = new Reduce(st.items.get(item).prod);

Проверка наличия заголовка поля перед его добавлением:

System.out.println(Prod.prods.get(st.items.get(item).prod).head);

Проверка, имеет ли добавленное уменьшение правильное поле заголовка:

System.out.println(actionTable.get(state)[t].prod.head);

A NullPointerException встречается в последнем операторе печати. Часть .prod определена, но .prod.head является нулевым, даже если исходный объект prod имел определенную головку. Это конструктор для уменьшения:

Reduce(int pr) {
    p = pr;
    length = Prod.prods.get(pr).length;
    prod = Prod.prods.get(pr);

}

Определены все RHS присвоений в конструкторе. Поэтому я не понимаю, почему поле head в объекте prod, к которому имеет доступ новый Reduce, не определяется при доступе к нему через actionTable.

Ответы [ 2 ]

0 голосов
/ 26 сентября 2011

Первое, что вы всегда должны делать, это: дойти до точки останова в вашей IDE, поставить галочку «остановить при исключении» и, возможно, дать имя NullPointerException. Затем запустите ваш код в отладчике, и он остановится точно в точке, где выбрасывается исключение NullPointerException.

0 голосов
/ 26 сентября 2011

Доверие наследству и все.Скорее всего, с массивами задействованы разные экземпляры массива (если вы увеличиваете / копируете ссылки на массивы).Еще немного System.out.println поможет там.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...