我想在生成的类中执行一个扩展抽象泛型类的方法,但它会抛出java.lang.AbstractMethodError。
PS:未生成泛型类
示例:
public abstract class AbstractSpecification<T> implements Specification<T>{
public abstract boolean isSatisfiedBy(T t);
public Specification<T> and(final Specification<T> specification) {
return new AndSpecification<T>(this, specification);
}
}
生成的类是
ClassPool pool = new ClassPool(true);
pool.insertClassPath(new ClassClassPath(AbstractSpecification.class));
CtClass abstractClazz = pool.get("com.mycompany.AbstractSpecification");
CtClass myclass = pool.makeClass("ValidAge");
myclass.setSuperclass(abstractClazz);
.
.
.
调用isSatisfiedBy
有效但and
有效java.lang.AbstractMethodError
答案 0 :(得分:0)
Javassist没有为您实现桥接方法,这仍然是您的责任。因此,在对AbstractSpecification
进行子类化时,需要实现两种方法,实际方法和T
的擦除桥梁。
例如,为了实现AbstractSpecification<Foo>
,您需要实现方法isSatisfiedBy(Foo)
和桥isSatisfiedBy(Object)
,其中后一种方法仅调用前者,包括转换。
如果这看起来很有效,请查看Byte Buddy,它可以透明地处理桥接方法。