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 шт):

Автор решения: Jap_Story

Я не уверен, что это будет лаконичное решение, но как на счёт паттерна Builder в лаконичном исполнении ч-з inner class?

https://habr.com/ru/post/244521/

В конце сможете просто вернуть себе ваш объект.

→ Ссылка