我正在尝试使用ASM Core框架(而不是Tree one)合并两个类的最佳策略。
由于ClassReader和ClassVisitor严格绑定到一个类,你会怎么做?
我已在官方文档中搜索过,但所有内容都是使用ClassNode实现的,该类是来自Tree模块。
假设我们有一个基础通用接口:
public interface CrudDao<T, ID>
{
T select(final ID id);
boolean update(final T object);
boolean insert(final T object);
boolean delete(final ID id);
}
具体的通用实现:
public class MyCrudDao<T, ID> implements CrudDao<T, ID>
{
@Override
public T select(final ID id) {
...
}
@Override
public boolean update(final T object) {
...
}
@Override
public boolean insert(final T object) {
...
}
@Override
public boolean delete(final ID id) {
...
}
}
现在我们定义一个扩展CrudDao
的抽象类,提供额外的功能或覆盖接口方法,同时对具体实现无动于衷:
public abstract class ConfigurationDao implements CrudDao<Configuration, String>
{
public List<Configuration> selectAll() {
...
}
@Override
public int count() {
...
}
}
我想用ASM获得的是一个新的具体类,它扩展了ConfigurationDao
,它将CrudDao
接口的方法代理到MyCrudDao
实现(如果还没有被覆盖) ,请参阅上面的count()
,并简单地复制抽象类方法。
我实际上在拉斐尔回答之后实现了这一点,但是在简单的基准测试之后,与ByteBuddy网站上报道的相比,这似乎很慢。
从accept()
电话到toByteArray()
电话(已排除)