java - 您可以生成使用 Java 注释覆盖方法的代码吗?

标签 java android annotations java-annotations

是否可以为一个类编写一个Java注释来生成一个覆盖该类父方法的方法?

就我而言,我想在 android 中执行此操作:

@OverrideOnTouch Foo 类扩展了 Activity {

并且它会在编译时生成一个 onTouch 重写方法。

可能吗?

最佳答案

注释无法生成代码。

可以编写一个注释处理器,它在编译时无论在哪里找到注释都添加了一个方法。

这是有关此主题的教程:

但是,请注意,编写注释处理器需要大量的 Java 编码工作。另请注意,注释处理器(使用 AnnotationProcessor API 实现并通过 Java 编译器调用)无法修改 Java 源代码。它只能生成新的“.java”文件。

因此,如果您想将新方法注入(inject)现有类中,则需要编译该类,然后使用使用 BCEL 或等效项的编译后注释处理器将所需方法添加到“.class”中编译器生成的文件。实现基于 BCEL 的处理器……甚至更加困难。当您升级 Java 时,此类处理器很容易损坏。 (很容易对相关规范不支持的 JVM/字节码级别实现做出假设......并且当平台发生变化时不再“工作”。)

此问题的一些答案中提到了这种方法:

关于java - 您可以生成使用 Java 注释覆盖方法的代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42315580/

相关文章:

android - Android 4.4 上的 Trigger.io 本地资源访问

Android Selector Drawable 不适用于属性

java - 将多个任意注释合并为一个

python - 使用循环引用为注释类型创建别名时如何避免 NameError?

java - 摆脱 Java 中的魔法数字

java - Tomcat 废话 : stop vs kill

java - 在 Android 中创建颜色编码的 ListView

java - 更改登录按钮上的 Facebook Logo 颜色

java - 将 Java 7 添加到循环列表迁移到 java 8

java - 如何让 Jackson mixin 与私有(private)字段一起工作?