Помогите преобразовать switch case в pattern matching используя библиотеку javaslang

matchers
java
Теги: #<Tag:0x00007f7b655f6940> #<Tag:0x00007f7b655f6800>

(Oleksii Ihnatiuk) #1

У меня есть метод который в соответствии с переменной sTabName кликает по определенному элементу и возвращает новую страницу. При разных кейсах страница может быть разной, поэтому возвращаемое значение у меня класс родитель.

    private BaseClass clickOnTab(String sTabName){

        switch (sTabName){

            case "Treatment Reviews":
                tab("TREATMENT REVIEWS").click();
                return new SpecificTreatmentReviewsPage();

            case "Videos & Guides":
                tab("VIDEOS & GUIDES").click();
                return new SpecificTreatmentVideosPage();
        }

        return null;

    }

Я не понимаю как используя pattern matching библиотеки javaslang выполнить клик по элементу и сделать return новой страницы.

С уважением,
Алексей


(Sergey Korol) #2
	private <T extends BaseClass> T selectTab(String name, Class<T> pageClass) {
		tab(name.toUpperCase()).click();
		return on(pageClass).create().get();
	}

	@SuppressWarnings("unchecked")
	public <T extends BaseClass> T selectTab(String name) {
		return (T) Match(name).of(
				Case($("Treatment Reviews"), n -> selectTab(n, SpecificTreatmentReviewsPage.class)),
				Case($("Videos & Guides"), n -> selectTab(n, SpecificTreatmentVideosPage.class)));
	}

Инициализация пейджи generic типа производится при помощи jOOR. Хотя, я бы вообще вынес это отдельной фабрикой.

Можно конечно и click запихнуть в результирующую функцию, но будет громоздко.

Названия, пожалуй, тоже лучше вынести в enum. Тогда и к uppercase не надо будет преобразовывать.


(Oleksii Ihnatiuk) #3

Большое спасибо, напишу что получилось.


(Oleksii Ihnatiuk) #4

Сергей IDE не понимает что такое on(), это третья строка в вашем примере. Как я понимаю в return мы возвращаем новый инстанс пейджи. Можете объяснить или дать ссылку что это за метод?

С уважением,
Алексей


(Sergey Korol) #5

Выше ведь есть линк на jOOR. :wink:


(Oleksii Ihnatiuk) #6

Да, перешел, почитал, понял. Спасибо, был невнимателен.