Java: использование this для определения типа возвращаемого значения метода
Есть набор PageObjects (PO1, PO2, ...) унаследованных от абстрактного класса BasePage. В BasePage есть метод generalMethod.
Есть класс с тестами TestClass, в которых используется fluent design, соответственно хочется вызывать generalMethod в тестах, так чтобы он возвращал объект, который его вызвал.
@Test
public void test() {
PO1 page1= new PO1();
page1.openPage()
.someMethodReturnPage1()
.generalMethod() //возвращает page1
.someMethodReturnPage2()//возвращает PO2 page2
.generalMethod() //возвращает page2
}
Единственный работающий способ, который я нашел - параметризировать generalMethod() и передавать класс требуемого возвращаемого объекта в параметрах, типа так -
public <T> T generalMethod(Class<T> t) {
...
return page(t); //page метод selenide
}
можно ли как то обойтись без передачи класса? По идее this в generalMethod содержит ссылку на объект, который generalMethod вызвал, но вот такая конструкция возвращает Object -
public <T> T generalMethod() {
...
Class<T> t=(Class<T>) this.getClass();
return page(t); //page метод selenide
}
PS.
Пока пришел к вот такой реализации
public <T> T generalMethod() {
...
return (T) this;
}
минус в том, что при вызове метода нужно явно указывать тип -
<PO1>generalMethod();
<PO2>generalMethod();
но, блин "this.getClass()" внутри generalMethod() возвращает PO1 или PO2 в зависимости от того вызван ли он у page1 или у page2, то есть метод "знает" нужный мне тип и без явного указания...
Ответы (1 шт):
Я не уверен, что это будет лаконичное решение, но как на счёт паттерна Builder в лаконичном исполнении ч-з inner class?
https://habr.com/ru/post/244521/
В конце сможете просто вернуть себе ваш объект.