Переопределить класс, используемый библиотекой во время выполнения - PullRequest
0 голосов
/ 08 января 2019

Я бы хотел переопределить метод, который использует один из моих сторонних библиотечных классов.

public abstract class IndirectClient<C extends Credentials, U extends CommonProfile> extends BaseClient<C, U> {
    private LogoutActionBuilder<U> logoutActionBuilder = new NoLogoutActionBuilder<>();

    @Override
    public final RedirectAction getLogoutAction(final WebContext context, final U currentProfile, final String targetUrl) {
        init(context);
        return logoutActionBuilder.getLogoutAction(context, currentProfile, targetUrl);
    }

}

В моем случае класс OidcLogoutActionBuilder, реализующий интерфейс LogoutActionBuilder, называется:

public class OidcLogoutActionBuilder<U extends OidcProfile> extends InitializableWebObject implements LogoutActionBuilder<U> {

    ...

    //I'd like to override this method
    @Override
    public RedirectAction getLogoutAction(final WebContext context, final U currentProfile, final String targetUrl) {
        init(context);
    }

}

Я попытался расширить класс OidcLogoutActionBuilder и переопределить нужный метод:

public class OidcLogoutActionBuilderCustom extends OidcLogoutActionBuilder<OidcProfile> {

        ...

        //Method overriden
        @Override
        public RedirectAction getLogoutAction(final WebContext context, final OidcProfile currentProfile, final String targetUrl) {
            init2(context);
        }
} 

Это не сработало, getLogoutAction() все еще вызывает OidcLogoutActionBuilder, а не OidcLogoutActionBuilderCustom во время выполнения. Как мне это сделать?

...