Collection Class
private E[] data;
@Override
public boolean add(E element) {
//NULL POINTER EXCEPTION HAPPENS ON NEXT LINE
data[actualSize] = element;
actualSize++;
return true;
}
主要
System.out.println ("Enter the integer to be added: ");
n = scan.nextInt();
ac.add(n);
在集合类中的注释行之后,我得到了空指针异常。为什么?!!!?
编辑:所以我的问题是我需要调整E []数据的大小,如何调整数据的大小?我的老师从来没有告诉我们这种“ E”的商务性,她甚至从未告诉我们“ E”这个东西到底叫什么或用什么。
最佳答案
为什么?!?!?
因为data
尚未初始化。 null
是尚未初始化的实例变量的默认值。
但是似乎存在一些更基本的问题:
您似乎给人的印象是Java数组将以合适的大小神奇地分配自己……并且它们会增长。实际上,当您分配数组时,您的程序必须明确说明其具有多少个元素。分配后,数组的大小是固定的。
该代码似乎是在尝试实现某种通用类型(其中E
是通用类型参数)。
所以我的问题是我需要调整E []数据的大小,如何调整数据的大小?
您将创建一个具有正确大小的新数组,将元素从旧的复制到新的,并更新data
变量以指向新的数组。查看有关如何在Java中创建新数组的注释/教科书。
我的老师从来没有告诉我们这种“ E”的商务性,她甚至从未告诉我们“ E”这个东西到底叫什么或用什么。
它很可能是通用类型参数。
我非常确定她会告诉班级有关此事的信息,或者设置Java教科书的相关部分以供班级阅读。
(假设E
是泛型类型参数,分配一个新的E[]
数组实例而没有“未经检查的转换”警告会有些棘手。也许您的讲师已经超越了该类当前的能力...)