2013-04-06 99 views
-3

我在我的应用程序中使用了ArrayList
我在全球范围内声明List<Product> productList = new ArrayList<Product>();,但产品未添加到此列表中,因为productList显示为null而不是空数组列表。ArrayList在java中未正确初始化

下面是我的代码:

Map<String, List<Product>> productListMap = productSuggestBox.getValueMap(); 

List<Product> queriedProductList = productListMap.get("productList"); 

long productId = Long.valueOf(productSuggestBoxValue); 

for (Product product : queriedProductList) { 
    if (product.getId() == productId) { 
     productList.add(product); 
     break; 
    } 
} 
+6

向我们显示您的代码。 – NPE 2013-04-06 04:44:05

+0

我删除了'gwt'标签,因为正如它所写,这似乎只是一个Java问题,与GWT无关。 – 2013-04-06 04:45:17

+0

@RoddyoftheFrozenPeas我们不知道这是他的代码实际上说的。我不会改变它说别的。 – Zyerah 2013-04-06 04:46:43

回答

1

下面是代码的结构与您提供的片段拼凑的尝试:

public class SalesInvoiceWidget extends Composite { 
    List<Product> productList = new ArrayList<Product>(); 

    // ... 

    private void someMethod() { 
     Map<String, List<Product>> productListMap = 
       productSuggestBox.getValueMap(); 

     List<Product> queriedProductList = productListMap.get("productList"); 

     long productId = Long.valueOf(productSuggestBoxValue); 

     for (Product product : queriedProductList) { 
      if (product.getId() == productId) { 
       productList.add(product); 
       break; 
      } 
     } 

假设上面重建完全是正确的,那么productList可以是null的唯一方法是在你的代码的某处(上面没有显示),你是分配nullproductList

另一种可能的解释是productList的另一个声明在范围内,您看到null;例如它可能是一个局部变量或一个名为productList的方法参数,即shadowing“全局”声明。


注意,在Java中一个变量不能奇迹般地成为null如果是以前非空。分配给它的东西,或者它是一个不同的变量。没有其他合理的解释......假设您使用的是纯Java。

+0

谢谢stephen,我会深刻的观察.. – 2013-04-06 06:33:50