我得到一个空指针,不熟悉比较方法并试图弄清楚我哪里出错了。我的想法是根据销售的产品数量排序,然后获得销售的前5个产品。一旦我实现了比较方法,它就会返回一个NullPointer。
public Result index() {
// Get list of all categories in ascending order
String name = "Best Sellers";
List<Category> categoriesList = Category.findAll();
List<Product> productsList;
Long cat = new Long("11");
productsList = bestSellers();
return ok(index.render(env, categoriesList, productsList, cat, "", getCurrentUser(), name));
}
public List<Product> bestSellers(){
List<Product> temp = Product.findAll("");
Collections.sort(temp, new Comparator<Product>() {
@Override
public int compare(Product p1, Product p2) {
if(p1.getCopiesSold()>p2.getCopiesSold()){
return 1;
} else if(p1.getCopiesSold()<p2.getCopiesSold()){
return -1;
}
return 0;
}
});
List<Product> bestSellers = new ArrayList<>();
for(int i=0; i<5; i++){
bestSellers.add(temp.get(i));
}
return bestSellers;
}
我的getter为一些尚未购买的商品返回null,所以我只需添加一个null检查,一切正常。
public Integer getCopiesSold() {
if(copiesSold==null){
copiesSold = 0;
}
return copiesSold;
}
答案 0 :(得分:1)
检查您的方法findAll()
。它似乎给出了一个列表,其中某些值的值为null。当Collections
使用的排序算法调用比较方法时,p1.getCopiesSold
或p2.getCopiesSold
会出错,因为p1或p2为空。
方法findAll()
也可能返回null而不是List
,或者方法getCopiesSold
返回null。
在java中,某些东西的值可以为null而不抛出异常,它只会在您尝试调用方法或使用它执行操作时抛出异常。因此,null变量可以是抛出错误的行所使用的任何变量。