Java GWT中的泛型和集合,空指针

Java GWT中的泛型和集合,空指针,java,generics,gwt,Java,Generics,Gwt,在GWT中调用向集合添加对象的方法时,我得到一个空指针错误。我不知道为什么,因为我所做的一切都创建了一个非常简单的对象(只包含一个字符串)。以下是调用函数和函数的代码: public class PlantMenu extends VerticalPanel { private Collection<PlantData> plantList; private Collection<PlantData> newPlantData; public

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

}
公共类PlantMenu扩展垂直面板{
私人收藏植物名录;
私人收集数据;
公共植物菜单(){
createPlants();
/*
for(迭代器i=plantList.Iterator();i.hasNext();){
Window.alert(i.next().getPlantName());
}*/
}
公众收集植物(){
PlantData plant1=新的PlantData(“草药”);
PlantData plant2=新的PlantData(“花卉”);
PlantData plant3=新的PlantData(“蔬菜”);
新增plantdata.add(plant1);
新增plantdata.add(plant2);
新增PlantData.add(plant3);
返回newPlantData;
}
}
尝试添加第一个工厂时出错(空指针),此行:

PlantData plant1=新的PlantData(“草药”)


感谢您的帮助:)

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

你可以这样做

private Collection<PlantData> plantList = new ArrayList<PlantData>();
private Collection<PlantData> newPlantData = new ArrayList<PlantData>();
private Collection plantList=new ArrayList();
私有集合newPlantData=newarraylist();

我使用了ArrayList,因为通常我们使用ArrayList。根据需要,还可以使用其他实现。

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

你可以这样做

private Collection<PlantData> plantList = new ArrayList<PlantData>();
private Collection<PlantData> newPlantData = new ArrayList<PlantData>();
private Collection plantList=new ArrayList();
私有集合newPlantData=newarraylist();

我使用了ArrayList,因为通常我们使用ArrayList。根据需要,还可以使用其他实现。

您没有正确初始化变量,这与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;
    }

}
公共类PlantMenu扩展垂直面板{
private List plantList=new ArrayList();
私有列表newPlantData=newarraylist();
公共植物菜单(){
createPlants();
用于(PlantData工厂:新PlantData){
Window.alert(plant.getPlantName());
}
}
公共植物列表(){
添加(新植物数据(“草药”);
添加(新植物数据(“花卉”);
添加(新植物数据(“蔬菜”);
返回newPlantData;
}
}

作为补充说明,您不应该扩展VerticalPanel,而应该扩展Composite,然后使用setWidget(…)将垂直面板用作小部件

您没有正确初始化变量,这与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;
    }

}
公共类PlantMenu扩展垂直面板{
private List plantList=new ArrayList();
私有列表newPlantData=newarraylist();
公共植物菜单(){
createPlants();
用于(PlantData工厂:新PlantData){
Window.alert(plant.getPlantName());
}
}
公共植物列表(){
添加(新植物数据(“草药”);
添加(新植物数据(“花卉”);
添加(新植物数据(“蔬菜”);
返回newPlantData;
}
}

作为补充说明,您不应该扩展VerticalPanel,而应该扩展Composite,然后使用setWidget(…)将垂直面板用作小部件

好的,那么我不能初始化集合集合了?试过了,似乎不起作用。它必须是集合的其他类型的子类?也许我们可以给你一个更好的主意。向我们展示代码并详细说明您试图实现的目标。private Collection plantList=new Collection();不正常吗?总而言之,我想我误解了集合的应用。我使用的是ArrayList,结果很好,我可以这样初始化一个:private ArrayList plantList=new ArrayList();集合是一个接口,你不能像那样直接实例化它。此外,左侧有收藏或列表也很好。我指的是程序到接口,而不是实现。实例化ArrayList,但将其放在集合或列表中,如我上面所示。好的,所以我不能初始化集合集合?试过了,似乎不起作用。它必须是集合的其他类型的子类?也许我们可以给你一个更好的主意。向我们展示代码并详细说明您试图实现的目标。private Collection plantList=new Collection();不正常吗?总而言之,我想我误解了集合的应用。我使用的是ArrayList,结果很好,我可以这样初始化一个:private ArrayList plantList=new ArrayList();集合是一个接口,你不能像那样直接实例化它。此外,左侧有收藏或列表也很好。我指的是程序到接口,而不是实现。实例化ArrayList,但将其放在集合或列表中,如我上面所示。如果醋的答案不正确,则表示您没有向我们提供足够的信息来帮助您。如果他的答案没有帮助,那么您需要向我们提供堆栈转储和更多信息。PlantData构造函数中似乎存在问题。如果醋的答案不正确,那么您没有向我们提供足够的信息来帮助您。如果他的回答没有帮助,那么您需要给我们堆栈转储和mor