Java泛型异常
我有两门课,Java泛型异常,java,eclipse,generics,netbeans,nullpointerexception,Java,Eclipse,Generics,Netbeans,Nullpointerexception,我有两门课,随机获取列表和驱动程序。RandomAcquinableList扩展了ArrayList并实现了RandomAcquinable(只包含2个抽象方法)并实现了这些方法 但是,当我运行Driver类时,它会说在Diver类中main方法的第二行有一个NullPointerException(整数I=…)。我不明白为什么它会抛出这个异常,因为这两个类在我看来都很好 public class RandomObtainableList<E> extends ArrayList&l
随机获取列表
和驱动程序
。RandomAcquinableList扩展了ArrayList并实现了RandomAcquinable(只包含2个抽象方法)并实现了这些方法
但是,当我运行Driver类时,它会说在Diver类中main方法的第二行有一个NullPointerException(整数I=…)。我不明白为什么它会抛出这个异常,因为这两个类在我看来都很好
public class RandomObtainableList<E> extends ArrayList<E> implements RandomObtainable<E> {
private Random random;
public RandomObtainableList() {
super();
random = new Random();
}
@Override
public E getRandom() throws NoSuchElementException {
//returns an element randomly selected from the collection
E e = this.get(random.nextInt(this.size()));
return e;
}
@Override
public boolean removeRandom() throws UnsupportedOperationException {
//try to remove a random element from the collection
boolean b = false;
int size = this.size();
if (size != 0){
E e = this.remove(random.nextInt(this.size()));
b = true;
}
return b;
}
}
驱动程序必须在未定义的默认构造函数中初始化列表,以便将其作为空的默认构造函数:
public Driver() {
// empty constructor
}
要获得预期的结果,您的驱动程序类将是:
public class Driver {
private static RandomObtainableList<Integer> list;
public Driver() {
list = new RandomObtainableList<>();
list.add(1);
list.add(2);
}
public RandomObtainableList getList() {
return this.list;
}
}
公共void驱动程序只是一个函数,而不是构造函数。所以RandomAcquinableList没有创建。谢谢你是对的!!
public class Driver {
private static RandomObtainableList<Integer> list;
public Driver() {
list = new RandomObtainableList<>();
list.add(1);
list.add(2);
}
public RandomObtainableList getList() {
return this.list;
}
}
public class Main {
public static void main(String[] args){
Driver d = new Driver();
Integer i = list.getRandom();
boolean b = list.removeRandom();
System.out.println("Element retrieved: " +i);
System.out.println("Element removed: " +b);
}
}