Могу ли я динамически генерировать класс, который реализует два или более интерфейса? - PullRequest
1 голос
/ 23 марта 2020

Я генерирую класс из одного интерфейса, используя прокси, например

public interface A {

    default String a() {
        return "a";
    }
}
A a = (A) Proxy.newProxyInstance(
            A.class.getClassLoader(),
            new Class<?>[] { A.class },
            new PassThrough());

, и он работает нормально, но мне интересно, могу ли я сгенерировать класс, который имеет доступ к каждому методу из несколько интерфейсов

public interface A {

    default String a() {
        return "a";
    }

    interface B {

        default String b() {
            return "b";
        }

    }

}

что-то вроде

 AB = ...;
 AB.a();
 AB.b();

1 Ответ

3 голосов
/ 24 марта 2020

Конечно, вы можете указать два или более интерфейсов, если хотите:

    Object o = Proxy.newProxyInstance(
        A.class.getClassLoader(),
        new Class<?>[] { A.class, A.B.class },
        new PassThrough());

Единственная «проблема» состоит в том, что нет способа объявить переменную с пересечением тип. В текущих версиях Java вы можете выполнить шаг, используя var:

    var ab = (A & A.B) o;
    ab.a();
    bb.b();

В предыдущих версиях Java вам пришлось бы объявлять две разные переменные, которые обе ссылаются на объект ab вы создали Например:

    A a = (A) o;
    A.B b = (A.B) o;
    a.a();
    b.b();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...