GWT中的泛型和集合,Null指针

时间:2009-02-25 03:26:40

标签: java generics gwt

当调用一个将对象添加到GWT中的集合的方法时,我得到一个空指针错误。我不知道为什么我所做的一切都创建了一个非常简单的对象(只包含一个字符串)。以下是调用函数和函数的代码:

public class PlantMenu extends VerticalPanel {

    private Collection<PlantData> plantList;
    private Collection<PlantData> newPlantData;

    public PlantMenu() {
        createPlants();
        /*
        for(Iterator<PlantData> i = plantList.iterator(); i.hasNext();) {
            Window.alert(i.next().getPlantName());
        }*/
    }

    public Collection<PlantData> createPlants() {
        PlantData plant1 = new PlantData("Herbs");
        PlantData plant2 = new PlantData("Flowers");
        PlantData plant3 = new PlantData("Vegetable");

        newPlantData.add(plant1);
        newPlantData.add(plant2);
        newPlantData.add(plant3);
        return newPlantData;
    }

}

尝试添加第一个工厂时出错(空指针),这一行:

PlantData plant1 = new PlantData(“Herbs”);

任何帮助表示赞赏:)

2 个答案:

答案 0 :(得分:5)

您没有初始化您的收藏。尽管如此,你已经告诉它不在那条线上,但我对此表示怀疑。显示完整的异常堆栈会更有帮助。您的PlantData构造函数中可能会发生异常,但您没有在此处显示它。

你可以这样做,

private Collection<PlantData> plantList = new ArrayList<PlantData>();
private Collection<PlantData> newPlantData = new ArrayList<PlantData>();

我使用过ArrayList,因为我们通常使用ArrayList。根据要求,也可以使用其他实现。

答案 1 :(得分:0)

你没有正确初始化变量,这与GWT无关,只是基本的Java。这是一个工作版本:

public class PlantMenu extends VerticalPanel {

    private List<PlantData> plantList = new ArrayList<PlantData>();
    private List<PlantData> newPlantData = new ArrayList<PlantData>();

    public PlantMenu() {
        createPlants();
        for(PlantData plant : newPlantData) {
                Window.alert(plant.getPlantName());
        }
    }

    public List<PlantData> createPlants() {
        newPlantData.add(new PlantData("Herbs"));
        newPlantData.add(new PlantData("Flowers"));
        newPlantData.add(new PlantData("Vegetable"));
        return newPlantData;
    }

}

作为旁注,您不应该扩展VerticalPanel,而是扩展Composite,然后使用垂直面板作为您的小部件使用setWidget(...);