繁体   English   中英

javassist和抽象通用类的java.lang.AbstractMethodError

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM