我在我的申请中使用ArrayList
我在全球范围内声明了List<Product> productList = new ArrayList<Product>();
,但产品未添加到此列表中,因为productList
显示为null
而不是空数组列表。
以下是我的代码:
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;
}
}
答案 0 :(得分: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
的唯一方法是代码中的某个地方(上面没有显示!),你分配 null
到productList
。
另一种可能的解释是,在您看到productList
时,null
的不同声明属于范围;例如它可能是一个局部变量或名为productList
的方法参数 shadowing “全局”声明。
请注意,如果以前非空,则Java 中的变量不能神奇地变为null
。分配给它的东西,或者它是一个不同的变量。没有其他似是而非的解释......假设您使用的是纯Java。