-3

私はArrayList自分のアプリケーションで を使用しています。グローバル
に宣言しましたが、空の配列リストではなくが表示されているため、製品がこのリストに追加されません。List<Product> productList = new ArrayList<Product>();productListnull

以下は私のコードです:

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

上記の再構成が完全に正しいと仮定すると、productList可能な唯一の方法nullは、コードのどこか (上には表示されていません!) に を割り当てる nullことproductListです。

別の考えられる説明はproductList、 ; が表示されている時点で、 の別の宣言がスコープ内にあるということnullです。たとえば、「グローバル」宣言を隠しproductListている名前の付いたローカル変数またはメソッド パラメータである可能性があります。


Java の変数は、それが以前に null でなかった場合、魔法のようにはならないことに注意してください。null何かが割り当てられているか、別の変数です。他にもっともらしい説明はありません...純粋なJavaを使用していると仮定します。

于 2013-04-06T06:30:26.353 に答える