Como eu faço uma classe, que não posso mudar, implementar uma interface?

Eu tenho uma classe de outra biblioteca que é de código fechado, mas eu quero ser capaz de usar uma interface para isso. A razão é que eu não quero fazerinstanceof cheques ounull-Verificações em todos os lugares, mas eu também não quero estender a classe existente.

Por exemplo, digamos que eu tenha este código:

public class Example {

    // QuietFoo is from another library that I can't change
    private static QuietFoo quietFoo;
    // LoudFoo is my own code and is meant to replace QuietFoo
    private static LoudFoo loudFoo;

    public static void main(String[] args) {
        handle(foo);
    }

    private static void handle(Object foo) {
        if (foo instanceof QuietFoo)
            ((QuietFoo) foo).bar();
        else if (foo instanceof LoudFoo)
            ((LoudFoo) foo).bar();
    }
}

Eu não posso mudarQuietFoo:

public class QuietFoo {

    public void bar() {
        System.out.println("bar");
    }
}

Mas euposso mudançaLoudFoo:

public class LoudFoo {

    public void bar() {
        System.out.println("BAR!!");
    }
}

O problema é que pode haver muitas outras implementações debar em muitas classes, e pode haver mais métodos do que apenasbar, então não só meuhandle método ficar lento e feio com muitainstanceof declarações, mas eu teria que escrever um desses métodos para cada método emQuietFoo eLoudFoo. Estender não é uma solução viável porque viola todoé um contrato desdeLoudFoo não é umQuietFoo.

Basicamente, dadoFoo:

public interface Foo {
    void bar();
}

Como posso fazerQuietFoo implementoFoo sem alterar a sua fonte, então eu não tenho que fazer fundição einstanceof chama em todos os lugares no meu código?

questionAnswers(1)

yourAnswerToTheQuestion