Я бы хотел избежать размышлений в проекте с открытым исходным кодом, который я разрабатываю. Здесь у меня есть классы вроде следующего.
public class PurchaseOrder {
@Property
private Customer customer;
@Property
private String name;
}
Я просматриваю аннотацию @Property
, чтобы определить, что я могу установить и получить из PurchaseOrder. Существует много таких классов с использованием java.lang.reflect.Field.get()
и java.lang.reflect.Field.set()
.
В идеале я хотел бы генерировать для каждого свойства invoker, как показано ниже.
public interface PropertyAccessor<S, V> {
public void set(S source, V value);
public V get(S source);
}
Теперь, когда я сканирую класс, я могу создать статический внутренний класс PurchaseOrder
, как это.
static class customer_Field implements PropertyAccessor<PurchaseOrder, Customer> {
public void set(PurchaseOrder order, Customer customer) {
order.customer = customer;
}
public Customer get(PurchaseOrder order) {
return order.customer;
}
}
С этими словами я полностью избегаю стоимости размышлений. Теперь я могу установить и получить из своих экземпляров собственную производительность. Может ли кто-нибудь сказать мне, как я это сделаю. Пример кода был бы замечательным. Я искал сеть для хорошего примера, но не могу найти ничего подобного. Примеры ASM и Javasist также довольно плохие.
Ключ здесь в том, что у меня есть интерфейс, который я могу обойти. Таким образом, у меня могут быть различные реализации, возможно, один с Java Reflection по умолчанию, один с ASM и один с Javassist?
Любая помощь будет принята с благодарностью.