像 @Override 这样的注释在 Java 内部是如何工作的?

2024-01-02

谁能向我解释一下 java 内部注释是如何工作的?

我知道如何使用 java 中的 java.lang.annotation 库创建自定义注释。但我仍然不明白它的内部工作原理,例如 @Override 注释。

如果有人能详细解释这一点,我将非常感激。


各种注释之间的第一个主要区别是它们是否在编译时使用然后被丢弃(例如@Override)或放置在已编译的类文件中并在运行时可用(如 Spring 的@Component)。这是由@保留 http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Retention.html注释的策略。如果您正在编写自己的注释,则需要确定该注释是否在运行时有用(可能用于自动配置)或仅在编译时有用(用于检查或代码生成)。

当使用注释编译代码时,编译器会看到注释,就像看到源元素上的其他修饰符一样,例如访问修饰符(public/private) or final。当它遇到注释时,它会运行一个注释处理器,它就像一个插件类,表示它对特定注释感兴趣。注释处理器通常使用反射 API 来检查正在编译的元素,并且可以简单地对它们运行检查、修改它们或生成要编译的新代码。@Override是第一个的例子;它使用 Reflection API 来确保它可以在超类之一中找到方法签名的匹配项,并使用Messager如果不能的话会导致编译错误。

有许多关于编写注释处理器的教程;这是一个有用的 http://travisdazell.blogspot.com/2012/10/writing-annotation-based-processor-in.html。查看方法the Processor界面 http://docs.oracle.com/javase/7/docs/api/javax/annotation/processing/Processor.html了解编译器如何调用注释处理器;主要操作发生在process方法,每次编译器看到具有匹配注释的元素时都会调用该方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

像 @Override 这样的注释在 Java 内部是如何工作的? 的相关文章

随机推荐

  • PhoneGap 缺少 plist.key

    当我尝试将我的 iTunes 应用程序安装程序加载到 iTunes 时 我缓解了此错误 缺少 Info plist 密钥 此应用程序尝试访问隐私敏感信息 没有使用说明的数据 应用程序的 Info plist 必须包含 NSPhotoLibr
  • Firestore 查询操作字符串如何处理不同的数据类型?

    如何火库 https firebase google com docs firestore opStr 操作字符串 中where https firebase google com docs reference js firebase fi
  • Integrate.nquad 的集成错误很大

    首先 我在椭圆上集成一个简单的函数 其次 我集成了相同的函数 并为其添加了常量值 正如您在我的消息底部看到的那样 结果并不一致 预先感谢您的帮助 coding utf 8 from scipy import integrate from m
  • 如何使用 C# 验证字符串不包含 HTML

    有没有人有一种简单 有效的方法来检查字符串不包含 HTML 基本上 我想检查某些字段是否只包含纯文本 我考虑过寻找 XElement Parse
  • SQL Server“。”别名不起作用

    我添加了一个别名 它应该指向我的本地 命名 实例 SQL2008 但是当我尝试连接到 时 它超时了 我错过了什么还是这是不允许的 我尝试过的别名不起作用 设置为 32 位和 64 位 我也尝试将端口留空 如果您要创建 TCP IP 别名 则
  • 如何将 SSL 证书添加到 Dash 应用程序 [重复]

    这个问题在这里已经有答案了 如何使用 Python 为在 Web 服务器上运行的 DASH 应用程序启用 HTTPS 我已经有 SSL 证书 key 和 crt 如果 dash 是处理路由的 Web 服务器 而不是 Apache 或 Ngi
  • PHP 对象数组

    所以我一直在寻找一段时间 但找不到一个简单问题的答案 PHP 中是否可以有一个对象数组 例如 ar array ar Obj1 ar obj2 由于某种原因 我无法在任何地方找到答案 我认为这是可能的 但我只需要确定一下 寻找诸如此类的一般
  • 如何更改facet_wrap中的facet标签

    我正在使用 ggplot 和facet wrap 来获取所需的绘图 我必须向每个方面的标签或变量或每个方面的名称添加一些内容 就像我们直接在 ggplot 下修改 xlab 和 ylab 一样 Example d lt ggplot dia
  • 带有 objectselect 表单的 Doctrine 自定义存储库

    这个问题是一个可能的解决方案ZF2 Doctrine 与 objectSelect 获得多对多关系 https stackoverflow com questions 24017193 zf2 doctrine get manytomany
  • 什么是 switch 表达式以及它们与 switch 语句有何不同?

    作为 Java SE 12 的一部分 switch表达式 https docs oracle com en java javase 13 language switch expressions html被引入 并且自 Java SE 14
  • 如何用 Python 编写一系列 Promise?

    是否可以写出一个序列promise https developer mozilla org en docs Web JavaScript Reference Global Objects Promise 或任务 使用only Python
  • 如何在 Xcode 构建阶段运行 Grunt 任务?

    我正在开发一个 Web 应用程序 其中包括 GruntJS 构建任务 我在 Xcode IDE 中使用 Phonegap Cordova 进行部署 我想将 grunt 构建过程集成到我的 Xcode 项目中以简化项目的运行 理想情况下 Xc
  • Environment.SpecialFolder.ApplicationData 返回错误的文件夹

    我有一个奇怪的问题 我的 NET 4 0 WPF 应用程序正在将数据保存到 ApplicationData 文件夹 Environment GetFolderPath Environment SpecialFolder Applicatio
  • Log4J Swing Appender

    我需要将 log4j 内容附加到 Swing 组件 JTextArea 或类似组件 有一个通用的方法可以做到这一点吗 我最终没有引入外部库 而是编辑 log4j properties 文件以包含以下内容 log4j rootCategory
  • 对 HttpModule 中的事件进行单元测试

    我的应用程序中有一个 CustomHttp 模块 用于删除不需要的响应标头 如下所示 public class RemoveServerHeadersModule IHttpModule public void Init HttpAppli
  • 函数调用超时

    我正在 Python 中调用一个函数 我知道该函数可能会停止并迫使我重新启动脚本 如何调用该函数或者将其包装在什么中 以便如果花费时间超过 5 秒 脚本就会取消该函数并执行其他操作 您可以使用signal http docs python
  • 在Visual Studio中调试Qt,缺少msvcp140d_app.dll

    我是新来的Qt 但一直在与视觉工作室 for C C 发展了几年 现在我正在尝试建立一个GUI对于我的项目 我安装了Qt 5 11 0和Qt我的工作计算机和家庭 PC 上都有 VS Tools 在工作中 我可以使用 VS 调试器构建和运行我
  • 删除重复项及其内在价值[重复]

    这个问题在这里已经有答案了 假设下一个向量 just a random vector lt c A B B C C D 这个想法是 如果某个值有重复项 则删除所有重复值和该值本身 为了得到看起来像这样的东西 A D 有什么办法可以得到上面的
  • D3.js 醉酒工具提示

    D3 js 能够支持醉酒提示吗 如果可能的话 有人可以给我举个例子吗 谢谢 这是一个工作示例 使用 jQuery Tipsy 的 D3 工具提示 http bl ocks org 1373263
  • 像 @Override 这样的注释在 Java 内部是如何工作的?

    谁能向我解释一下 java 内部注释是如何工作的 我知道如何使用 java 中的 java lang annotation 库创建自定义注释 但我仍然不明白它的内部工作原理 例如 Override 注释 如果有人能详细解释这一点 我将非常感