2017-04-13 5 views
0

抽象的なジェネリッククラスを拡張し、java.lang.AbstractMethodErrorをスローする生成クラス内のメソッドを実行したい。javassistと抽象ジェネリッククラスを持つjava.lang.AbstractMethodError

PSは:ジェネリッククラスが生成されていない

例:生成されたクラスはisSatisfiedBy作品が、andを起動

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); 
. 
. 
. 

java.lang.AbstractMethodError

+0

OSGiランタイムのバンドルでこれを実行していると仮定しているので、 'osgi'ラベルを追加したのです。それが実際の場合は、環境についての詳細と、メソッドの生成方法と呼び出し方法の詳細を提供する必要があります。 –

答えて

0

Javassistのにはないスロー

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); 
    } 
} 

ある

実現あなたのためのブリッジ方法は、これはあなたの責任になります。したがって、 AbstractSpecificationをサブクラス化するときは、実際の方法と消去のブリッジを実装するときに2つの方法を実装する必要があります。 T

例えばAbstractSpecification<Foo>を実装するには、メソッドisSatisfiedBy(Foo)とブリッジisSatisfiedBy(Object)を実装する必要があります。後者のメソッドでは、キャストを含む前者のメソッドしか呼び出されません。

これがうまくいくと思われる場合は、ブリッジメソッドを透過的に処理するByte Buddyをご覧ください。

関連する問題