I'm trying to better understand generics in Java, and confronted with some issue. Please, help to find out why in following code class "BPage" using data from "APageData" instead of "BPageData"?
public abstract class PageData {}
public abstract class Page<T extends PageData> {
public 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);
}
}
public class Main {
public static void main(String[] args) {
APage aPage = new APage(new APageData());
aPage.getLocator();
BPage bPage = new BPage(new BPageData());
bPage.getLocator();
}
}
the result is
//*[@id="id_1"]
//*[@id="id_1"]