Alternative zu java.lang.reflect.Proxy zum Erstellen von Proxys abstrakter Klassen (anstelle von Interfaces)

Gemäßdie Dokumentatio:

[java.lang.reflect.]Proxy bietet statische Methoden zum Erstellen dynamischer Proxy-Klassen und -Instanzen und ist außerdem die Oberklasse aller von diesen Methoden erstellten dynamischen Proxy-Klassen.

DasnewProxyMethod Method (verantwortlich für die Generierung der dynamischen Proxys) hat die folgende Signatur:

public static Object newProxyInstance(ClassLoader loader,
                                      Class<?>[] interfaces,
                                      InvocationHandler h)
                             throws IllegalArgumentException

Leider verhindert dies, dass ein dynamischer Proxy generiert wird, dererweiter eine bestimmte abstrakte Klasse (anstatt implementieren spezifische Schnittstellen). Dies ist sinnvoll, wenn man bedenkt,java.lang.reflect.Proxy ist "die Oberklasse aller dynamischen Proxys", wodurch verhindert wird, dass eine andere Klasse die Oberklasse ist.

Daher gibt es Alternativen zujava.lang.reflect.Proxy das kann dynamische Proxys erzeugen, dieerbe von einer bestimmten abstrakten Klasse, wobei alle Aufrufe an das @ umgeleitet werdabstrak Methoden zum Aufrufhandler?

Angenommen, ich habe eine abstrakte KlasseDog:

public abstract class Dog {

    public void bark() {
        System.out.println("Woof!");
    }

    public abstract void fetch();

}

Gibt es eine Klasse, mit der ich Folgendes ausführen kann?

Dog dog = SomeOtherProxy.newProxyInstance(classLoader, Dog.class, h);

dog.fetch(); // Will be handled by the invocation handler
dog.bark();  // Will NOT be handled by the invocation handler

Antworten auf die Frage(4)

Ihre Antwort auf die Frage