¿Cómo hago una clase, que no puedo cambiar, implemento una interfaz?

Tengo una clase de otra biblioteca que es de código cerrado, pero quiero poder usar una interfaz para ella. La razón es que no quiero hacer.instanceof cheques onull- verifica en todas partes, pero tampoco quiero extender la clase existente.

Por ejemplo, digamos que tengo 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();
    }
}

No puedo cambiarQuietFoo:

public class QuietFoo {

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

Pero yopuede cambioLoudFoo:

public class LoudFoo {

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

El problema es que puede haber muchas otras implementaciones debar en muchas clases, y puede haber más métodos que simplementebar, así que no solo mihandle método se vuelve lento y feo con un montón deinstanceof declaraciones, pero tendría que escribir uno de estos métodos de manejo para cada método enQuietFoo yLoudFoo. Extender no es una solución viable porque viola el conjuntoes un contrato desdeLoudFoo no es unQuietFoo.

Básicamente, dadoFoo:

public interface Foo {
    void bar();
}

Como puedo hacerQuietFoo implementarFoo Sin cambiar su fuente, así que no tengo que hacer casting yinstanceof ¿Llama a todas partes en mi código?

Respuestas a la pregunta(1)

Su respuesta a la pregunta