继承类中的Java类泛型NullPointerException

继承类中的Java类泛型NullPointerException,java,generics,Java,Generics,请帮助我理解下一段代码中的错误,因为我对Java泛型的了解还不多。 无法找出为什么我在BPage类中获取的pageData为null,而在APage中则可以。提前谢谢。 我已将Example类简化为几行: public abstract class PageData { } public abstract class Page<T extends PageData> { protected T pageData; public Page(T pageData) {

请帮助我理解下一段代码中的错误,因为我对Java泛型的了解还不多。 无法找出为什么我在BPage类中获取的pageData为null,而在APage中则可以。提前谢谢。 我已将Example类简化为几行:

public abstract class PageData {
}

public abstract class Page<T extends PageData> {
    protected T pageData;
    public Page(T pageData) {
        this.pageData = pageData;
    }
}

public class APageData extends PageData {
    public final String locator = "//*[@id=\"id_1\"]";
}
public class APage<T extends APageData> extends Page<APageData> {
    public APage(T pageData) {
        super(pageData);
    }

    public void getLocator() {
        System.out.println(pageData.locator);
    }
}


public class BPageData extends APageData {
    public final String locator = "//*[@class=\"class_1\"]";
}
public class BPage extends APage<BPageData> {
    public BPage(BPageData pageData) {
        super(pageData);
    }
}


APage aPage = new APage(new APageData());
aPage.getLocator();  // locator found, OK

BPage bPage = new BPage(new BPageData());
bPage.getLocator();  //pageData  NullPointerException
公共抽象类PageData{
}
公共抽象类页面{
受保护的页面数据;
公共页(T页数据){
this.pageData=pageData;
}
}
公共类APageData扩展了PageData{
公共最终字符串定位器=“//*[@id=\“id\u 1\”];
}
公共类APage扩展页面{
公共公寓(T页数据){
超级(页面数据);
}
public void getLocator(){
System.out.println(pageData.locator);
}
}
公共类BPageData扩展了APageData{
公共最终字符串定位器=“//*[@class=\“class\u 1\”];
}
公共类BPage扩展为APage{
公共BPage(BPageData页面数据){
超级(页面数据);
}
}
APage APage=新APage(新APageData());
aPage.getLocator();//找到定位器,好吗
BPage BPage=新BPage(新BPageData());
bPage.getLocator()//pageData NullPointerException

你需要告诉上级该怎么做

public class BPage extends APage<BPageData> {
    public BPage(BPageData pageData) {
        super(pageData);
        //this.pageData = pageData;
    }
}
公共类BPage扩展了APage{
公共BPage(BPageData页面数据){
超级(页面数据);
//this.pageData=pageData;
}
}

此代码无法编译。您必须从
BPage
的构造函数调用
APage
的构造函数。是的,很抱歉这个错误,但这不是原因,我打电话时弄错了。我已经更正了代码。当然我称之为super First这是真的(我的评论也有同样的效果),但这不是OP所要问的。