Refactor - metoda robiąca to samo, zwracająca dwa różne typy

0

Cześć, korzystam z HtmlUnita i w zależności od tego jaką stronę otwieram, muszę zwrócić raz UnexpectedPage, a raz HtmlPage i mam dwie metody, które robią to samo, ale zwracające różne typy.
W jaki sposób zrobić z tego jedną metodę?

public UnexpectedPage getUnexpectedPageFromUrl(String url){
        UnexpectedPage page = null;
        try {
            page = Main.WEB_CLIENT.getPage(url);
        }  catch (FailingHttpStatusCodeException e) {
            e.printStackTrace();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return page;
    }

    public HtmlPage getHtmlPageFromUrl(String url){
        HtmlPage page = null;
        try {
            page = Main.WEB_CLIENT.getPage(url);
        }  catch (FailingHttpStatusCodeException e) {
            e.printStackTrace();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return page;
    }
1

Na moje oko to pewnie zarówno UnexpectedPage jak i HtmlPage są podtypami jakiejś bazowej klasy/interfejsu. Zresztą przecież tutaj masz jakiś dziki unchecked cast na 100% tak na oko. Co za problem napisać w takim razie:

    class BasePage {
    }

    class UnexpectedPage extends BasePage {
    }

    public BasePage getPage(String url) throws MalformedURLException, IOException {
        return new BasePage(); //whatever
    }

    public <T extends BasePage> Optional<T> getPageOfType(String url, Class<T> typeClass) {
        try {
            return Optional.of((T) getPage(url));
        } catch (IOException e) {
            e.printStackTrace();
        }
        return Optional.empty();
    }

    public Optional<UnexpectedPage> getUnexpectedPageFromUrl(String url) {
        return getPageOfType(url, UnexpectedPage.class);
    }

Coś takiego bym zrobił. Niemniej nie bardzo rozumiem sens tego castowania u ciebie. Po co chcesz konkretny typ dostać? Nie możesz polegać tam na polimorfiźmie?

0

W zasadzie jakiegoś laga na głowie miałem, skorzystałem z polimorfizmu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1