java - 如何在使用 javaassist 创建 .class 文件时向方法添加 @Override 注释?

标签 java javassist

如何在使用 javaassist 创建类时将 @Override 注解添加到方法中?

ClassPool pool = ClassPool.getDefault();
CtClass ctClasz = pool.makeClass("test.ExampleImpl");
ctClasz.addInterface(pool.get(MyInterface.class.getName()));
CtMethod method = CtNewMethod.make ("@Override public void print() { System.out.println(\"Hello!    \"); }", ctClasz);
ctClasz.addMethod(method);

System.out.println("Implementd: Interfaces:" + ctClasz.getInterfaces());
System.out.println("Methods: " + ctClasz.getMethods());
ctClasz.writeFile("D:");

这段代码抛出如下异常:

 Exception in thread "main" javassist.CannotCompileException: [source error] syntax error    
 near "@Override p"
at javassist.CtNewMethod.make(CtNewMethod.java:78)
at javassist.CtNewMethod.make(CtNewMethod.java:44)
at javaassist.Demo.main(Demo.java:17)
 Caused by: compile error: syntax error near "@Override p"
at javassist.compiler.Parser.parseClassType(Parser.java:983)
at javassist.compiler.Parser.parseFormalType(Parser.java:191)
at javassist.compiler.Parser.parseMember1(Parser.java:51)
at javassist.compiler.Javac.compile(Javac.java:89)
at javassist.CtNewMethod.make(CtNewMethod.java:73)
... 2 more

最佳答案

@Override 不是运行时注解,因此即使您可以添加它,也不会产生任何影响。

对于确实具有运行时效果的注释 (RetentionPolicy.RUNTIME),您可以查看 this question .

关于java - 如何在使用 javaassist 创建 .class 文件时向方法添加 @Override 注释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11313114/

相关文章:

java - 使用Javassist修改代码生成java.lang.VerifyError : Expecting to find integer on stack

java - 使用 javassist 创建类并使其可用

java - 如何在 Java 小程序中将 GroupLayout 的内容居中

java - 如果连接列包含有条件的数据,如何在 JPA 中检查

java - 如何以及在哪里检查某些 Apache Camel 设置

Javassist:重新创建一个类 - 先删除,还是 defrost() 然后修改?

java - 从多合一 jar 中附加 java 代理

java - PowerMock 和 Java 8 问题 : InterfaceMethodrefInfo cannot be cast to MethodrefInfo

java - 从文件中读取行索引处的单词

java - AndroidManifest 中的工具替换