我有一个通用类
public class GenericBookDet<K,V>
{
private K bkId;
private V bkDescription;
public GenericBookDet()
{
this.bkId = null;
this.bkDescription = null;
}
public GenericBookDet(K bkId, V bkDescription)
{
this.bkId = bkId;
this.bkDescription = bkDescription;
}
...
//getter methods
//setter methods
}
我在另一个类中创建了这个类的数组,并希望添加新书。
public class GenericBookStore<K,V>
{
static int noOfbooks = 0;
GenericBookDet<K,V>bk1[];
public int addBook(K key, V bkDescription)
{
this.bk1[noOfbooks] = new GenericBookDet<K, V>(key,bkDescription);
this.bk1[noOfbooks].setbkDescription(bkDescription);
++noOfbooks;
return noOfbooks;
}
}
我以下列方式调用addBook方法:
GenericBookStore<String, String> bkStore = new GenericBookStore<String,String>();
bkStore.addBook("1010", "ABCD");
但是这会在addBook方法的第一行抛出NullPointerException。
我想在GenericBookStore中创建一个通用的书籍数组,我可以在bkDescription字段中传递String或对象;
答案 0 :(得分:6)
NPE的发生是因为您没有初始化GenericBookDet<K,V>bk1[]
GenericBookDet<K,V>bk1[] = new GenericBookDet[10]
您无法创建参数化类型的数组。您可以添加@SuppressWarnings("unchecked")
,这样就不会收到任何警告。
同样noOfbooks
不应该是static
。如果您有超过10个元素,则必须调整数组的大小:创建一个新元素并移动其中的所有内容。
最好的选择是使用List<GenericBookDet<K,V>>
。
答案 1 :(得分:3)