-3

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;
    }
}
4

1 回答 1

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;
            }
        }

假设上面的重建是完全正确的,那么唯一的方法productListnull在你的代码中的某个地方(上面没有显示!),你分配 nullproductList.

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


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

于 2013-04-06T06:30:26.353 回答