Class CompositeProxy

java.lang.Object
jdk.jpackage.internal.util.CompositeProxy

public final class CompositeProxy extends Object
Dynamic proxy dispatching method calls to multiple objects. It is aimed at creating objects from mixins. The class provides functionality similar to that of net.sf.cglib.proxy.Mixin class from the cglib library. Sample usage:
interface Sailboat {
    default void trimSails() {
    }
}

interface WithMain {
    void trimMain();
}

interface WithJib {
    void trimJib();
}

interface Sloop extends Sailboat, WithMain, WithJib {
    @Override
    public default void trimSails() {
        System.out.println("On the sloop:");
        trimMain();
        trimJib();
    }
}

interface Catboat extends Sailboat, WithMain {
    @Override
    public default void trimSails() {
        System.out.println("On the catboat:");
        trimMain();
    }
}

final var withMain = new WithMain() {
    @Override
    public void trimMain() {
        System.out.println("  trim the main");
    }
};

final var withJib = new WithJib() {
    @Override
    public void trimJib() {
        System.out.println("  trim the jib");
    }
};

Sloop sloop = CompositeProxy.create(Sloop.class, new Sailboat() {
}, withMain, withJib);

Catboat catboat = CompositeProxy.create(Catboat.class, new Sailboat() {
}, withMain);

sloop.trimSails();
catboat.trimSails();
Output:
 On the sloop:
   trim the main
   trim the jib
 On the cat:
   trim the main
 
See Also: