简体   繁体   中英

Extending Page Object Base class and LoadableComponent<?> together

Currently i'm implementing LoadableComponent design pattern for one of my project.

Earlier i was using a 'BasePage' which every page under 'Pages' package were extending.

Now as per LoadableComponent design pattern, every page needs to extend LoadableComponent and should override 'load()' and 'isLoaded()' method.However my question is how can i extend both BasePage and LoadableComponent in each page class ??

If i use multilevel inheritance , then how can i define isLoad() and isLoaded() for each class ?? as they needs to be different for every class.Also nested component would be impossible.

public class BasePage<T extends BasePage<T>> extends LoadableComponent<BasePage>{

    .......

}


public class LoginPage extends BasePage {

     ..........  

}

Please do suggest me a solution ??

Well , i solved it : -

public class BasePage<T extends BasePage<T>> extends LoadableComponent<T>{

    @Override
    public boolean isLoaded() {
       // Blank as all implemented algo comes under pages
    }

    @Override
    public boolean isLoad() {
       /// Will be Blank
    }
}


public class LoginPage extends BasePage {

    @Override
    public boolean isLoaded() {
       //Write logic
    }  

    @Override
    public boolean isLoad() {
       /// Write Logic
    }


}

You can override all non-private non-static methods in a subclass. Here is an example based on your project:

public class BasePage<T extends BasePage<T>> extends LoadableComponent<BasePage>{

    public boolean isLoaded() {
       // Do something interesting
    }

    public boolean isLoad() {
       // Do something interesting
    }
}


public class LoginPage extends BasePage {

    @Override
    public boolean isLoaded() {
       // Do something new based on LoginPage
    }  

}

More information can be found here: http://docs.oracle.com/javase/tutorial/java/IandI/override.html

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM