我想避免在我正在开发的开源项目中进行反思。在这里,我有如下课程。
public class PurchaseOrder {
@Property
private Customer customer;
@Property
private String name;
}
我扫描@Property
注释以确定我可以从 PurchaseOrder 反射性地设置和获取什么。有很多这样的类都使用java.lang.reflect.Field.get()
and java.lang.reflect.Field.set()
。
理想情况下,我想为每个属性生成一个调用程序,如下所示。
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?
任何帮助将不胜感激。