[英]java.lang.AbstractMethodError: abstract method not implemented
[英]java.lang.AbstractMethodError with javassist and abstract generic classes
我想在生成的类中执行一种方法,该方法扩展了一个抽象的泛型类,但是会引发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
Javassist不会为您实现桥接方法,这仍然是您的责任。 因此,在对AbstractSpecification
进行子类化时,需要实现两种方法,即实际方法和T
擦除的桥梁。
例如,要实现AbstractSpecification<Foo>
,您将需要实现一个方法isSatisfiedBy(Foo)
和一个桥接器isSatisfiedBy(Object)
,其中后一种方法仅调用前者,包括转换。
如果这似乎有用 ,请看一下Byte Buddy ,它为您透明地处理桥接方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.