2

javassistを使用してクラスを作成し、それにアノテーションを追加しています。CtClass.writeFileを使用し、Javaデコンパイラでクラスファイルを表示すると、アノテーションはありますが、class.getAnnotations()またはclass.getDeclaredAnnotations()を使用すると、リストは空になります。

ClassPool pool = ClassPool.getDefault();
pool.insertClassPath(new ClassClassPath(cl.loadClass("javax.jws.WebService")));
CtClass pikoClass = pool.makeClass("br.com.stuff.Piko");
ConstPool constPool = pikoClass.getClassFile().getConstPool();
AnnotationsAttribute attr = new AnnotationsAttribute(constPool, annotationsAttribute.visibleTag);
Annotation annoWebService = Annotation(constPool, pool.get("javax.jws.WebService"));
attr.setAnnotation(annoWebService);
pikoClass.getClassFile().addAttribute(attr);
Class piko = pikoClass.toClass();
piko.getDeclaredAnnotations(); // this is always empty
// Also tried
Annotation annoWebService = new Annotation("WebService", constPool);
Annotation annoWebService = new Annotation("@WebService", constPool);
Annotation annoWebService = new Annotation("javax.jwsWebService", constPool);
Annotation annoWebService = new Annotation("@javax.jwsWebService", constPool);
4

2 に答える 2

2

問題は解決しました。バージョン3.1を使用していましたが、現在は3.12.1.GA(mavenリポジトリの最後)を使用しており、このバージョンではアノテーションが機能します。

于 2011-05-18T18:30:45.253 に答える
1

多分私はばかげています、そしてこれは役に立たない答えです、しかしあなたが言うエラーを受け取っているなら

注釈は抽象的です。インスタンス化できません

インポートをチェックし、正しいアノテーションをインポートしていることを確認することを忘れないでください。

javassist.bytecode.annotation.Annotationをインポートします。

そして、Eclipseによって自動的にインポートされた間違ったライブラリではなく、私の人生の20分を無駄にしました(java.lang.annotation.Annotation

于 2016-06-15T07:35:20.750 に答える