У меня есть два несвязанных классов Java (только *.class
, не *.java
), как это:Как динамически создать общий класс прокси двух несвязанных классов?
public class Trick {
public String getName() { return "Jack"; }
public String trick() { ... }
}
и
public class Treat {
public String getName() { return "John"; }
public String treat() { ... }
}
и я хотел бы, чтобы сформировать своего рода прокси класса во время выполнения, который представляет объединение обоих классов и пересылает их в соответствующий экземпляр, и, возможно, бросьте, если это невозможно. Я предполагаю, что это можно сделать с помощью cglib
, но я не знаю с чего начать.
Это то, что я хотел бы сделать (псевдокод):
// prepare: generate a common interface
TrickOrTreat trickOrTreat = magic.createUnionInterface(Trick.class, Treat.class);
// use with concrete interface A:
Trick trick = new Trick();
TrickOrTreat proxyA = magic.createProxy(trickOrTreat.class, trick);
System.out.println("trick name: " + proxyA.getName());
// use with concrete interface B:
Treat treat = new Treat();
TrickOrTreat proxyB = magic.createProxy(trickOrTreat.class, treat);
System.out.println("treat name: " + proxyB.getName());
Или что-то в этом роде. Я хотел бы сделать это полностью динамично, возможно, cglib
? Если это невозможно, я бы сделал это с шагом генерации кода между ними?
Я не понимаю, почему вы хотите сделать это динамически? Поскольку в любом случае вам нужно писать интерфейс TrickOrTreat статически ... В качестве ориентира cglib следует использовать только тогда, когда у вас нет возможности узнать типы объектов, которые вы будете иметь во время выполнения, то есть только для кода библиотеки. –
@DLevant Hrm, да. Поскольку я хочу написать 'TrickOrTreat' в моем исходном коде клиента, я должен иметь это как класс заранее. Вы правы, иначе это не имеет смысла. Поэтому я * должен иметь * предыдущий проход с генератором кода. Хорошо, тогда 'cglib' - не правильный инструмент, но что же тогда? 'javaparser' имеет' * .java' как вход, которого у меня нет. Итак ... как идти? – towi
Я до сих пор не понимаю, почему вы не просто пишете все, что вам нужно от руки ... –