Java 检查数组索引是否为null时出现NullPointerException
我试图创建一个堆栈,但遇到了这样的问题:每次我试图检查索引值时,都会得到一个NullPointerExceptionJava 检查数组索引是否为null时出现NullPointerException,java,nullpointerexception,stack,Java,Nullpointerexception,Stack,我试图创建一个堆栈,但遇到了这样的问题:每次我试图检查索引值时,都会得到一个NullPointerException private E[] items; public Stack(Class<E> type) { E[] items = (E[]) new Object[10]; } public boolean isEmpty(){ if(items[0] == null){ return true; } return false; }
private E[] items;
public Stack(Class<E> type) {
E[] items = (E[]) new Object[10];
}
public boolean isEmpty(){
if(items[0] == null){
return true;
}
return false;
}
在调用isEmpty()期间
显然,我知道项[0]此时应该为null,并且希望能够根据它是否为null来执行操作,在这种情况下,由于堆栈为空,因此返回true。如何在不获取NullPointerException的情况下执行此操作?构造函数中的行
E[] items = (E[]) new Object[10];
创建局部变量,但不初始化类字段项
。使用
items = (E[]) new Object[10];
编译器将发出一个警告,指出未使用
项
,因此最好注意这些警告。同样,在创建泛型类时,我建议稍微改变一下。您可以将该类声明为泛型,而不是将其作为构造函数参数传递,它的工作原理相同
public class Stack<E>
{
private E[] items;
public Stack() {
items = (E[]) new Object[10];
}
public boolean isEmpty(){
if(items[0] == null){
return true;
}
return false;
}
public E push(E item){
...
}
public E peek(){
...
}
.
.
.
}
公共类堆栈
{
私人E[]项目;
公共堆栈(){
items=(E[])新对象[10];
}
公共布尔值为空(){
如果(项[0]==null){
返回true;
}
返回false;
}
公共电子推送(电子项目){
...
}
公共E peek(){
...
}
.
.
.
}
那么您的主类将如下所示:
Stack<String> myStack = new Stack<String>();
myStack.push("hi");
System.out.println(myStack.isEmpty());
Stack myStack=new Stack();
myStack.push(“hi”);
System.out.println(myStack.isEmpty());
这更接近于java内置泛型类的约定。items本身为空。不能引用到空数组中。
public class Stack<E>
{
private E[] items;
public Stack() {
items = (E[]) new Object[10];
}
public boolean isEmpty(){
if(items[0] == null){
return true;
}
return false;
}
public E push(E item){
...
}
public E peek(){
...
}
.
.
.
}
Stack<String> myStack = new Stack<String>();
myStack.push("hi");
System.out.println(myStack.isEmpty());