注释看不见?

2024-01-13

这让我很困惑。我有一个带有自定义注释的类,但我似乎无法验证该注释是否存在。我在这里做错了什么?如果我跑MyOperationTest(见下文),我得到的结果是:

implements Library.Operation: true
has @Library.Marker: false
Tada!

库.java:

package com.example.gotchas;

public class Library {
    private Library() {}

    public @interface Marker {}

    public interface Operation {
        public void execute(); 
    }
}

我的操作.java:

package com.example.gotchas;

@Library.Marker
public class MyOperation implements Library.Operation {
    @Override public void execute() {
        System.out.println("Tada!");
    }
}

我的操作测试.java:

package com.example.gotchas;

public class MyOperationTest {
    static public void main(String[] args)
    {
        try {
            Class<?> cl = Class.forName("com.example.gotchas.MyOperation");
            boolean implementsLibraryOperation =
                Library.Operation.class.isAssignableFrom(cl);
            boolean hasLibraryMarker =
                cl.isAnnotationPresent(Library.Marker.class);
            System.out.println("implements Library.Operation: "
                    +implementsLibraryOperation);
            System.out.println("has @Library.Marker: "+hasLibraryMarker);
            if (implementsLibraryOperation)
            {
                Class<? extends Library.Operation> opClass = 
                    cl.asSubclass(Library.Operation.class); 
                Library.Operation op = opClass.newInstance();
                op.execute();
            }
        }
        catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        catch (InstantiationException e) {
            e.printStackTrace();
        }
        catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }
}

你必须定义@Retention http://download.oracle.com/javase/6/docs/api/java/lang/annotation/Retention.html为您的注释:

@Retention(RetentionPolicy.RUNTIME)
public @interface Marker {}

否则,注释在运行时不会保留。

(您还可以添加明确的@Target(ElementType.TYPE)如果您想限制注释仅在类上使用)

作为旁注 - 将注释定义为内部类并不是常见的做法。

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

注释看不见? 的相关文章

  • 如何使用 Java Swing 创建图像映射?

    我需要使用 Swing 制作一个显示背景图像的图像地图 然后当鼠标悬停在 或单击 特定热点上时 我需要弹出一个 放大 图像并显示它 我正在考虑扩展 JPanel 以包含图像引用并通过 PaintComponent g 方法绘制该图像 到目前
  • FOP apache - 支持希伯来字母

    过去几天我一直在调查 FOP apache 中对希伯来字母的支持 用于生成 PDF 文件的项目 我看到以前有一个问题 我不太明白是否解决了 如果有支持 有人可以向我展示 重定向到简单的示例 为我提供带有希伯来字母的 XSL FO 文件 当使
  • Mockito:使用“thenReturn”中的方法返回模拟不起作用

    我遇到了我认为可能是 Mockito 的错误 但想知道是否有其他人可以解释为什么这个测试不起作用 基本上 我有两个对象 如下所示 public class FirstObject private SecondObject secondObj
  • 使用 Apache Commons File Upload 解析 multipart/form-data

    Apache Commons File Upload 包是否提供了流解析的通用接口multipart form data块通过InputStream 附加Array
  • EventQueue.invokeLater vrs SwingUtilities.invokeLater

    有人可以强调这两者之间的差异以及两者都是必需的实例吗 我有一个可以互换使用两者的应用程序 但想知道其中一个是否比另一个更好 显然他们都接受Runnable object 对我来说 我想我可以使用我喜欢的那个 为什么这两个相似的功能在不同的类
  • java中应用程序的CPU核心数和线程数之间有什么关系?

    我是java新手多线程编程 我想到的问题是 根据我的数量 我可以运行多少个线程CPU核心数 如果我运行的线程超过CPU核心数机器运行应用程序会产生开销吗 例如 当我们有一台服务器计算机 其中有一个运行 2 个线程 主线程 开发人员线程 的服
  • IntelliJ,无法启动简单的 Web 应用程序:无法 ping 本地主机上的服务器:1099

    我正在尝试按照本教程在 IntelliJ 中制作一个简单的 Web 应用程序 http wiki jetbrains net intellij Creating a simple Web application for Tomcat in
  • 原子/易失性/同步之间有什么区别?

    原子 易失性 同步内部如何工作 下面的代码块有什么区别 Code 1 private int counter public int getNextUniqueIndex return counter Code 2 private Atomi
  • 用 Maven 解决 jar 地狱问题?

    我正在使用两个 jars A 和 B B 是一个库 A 的类使用库 B 中的一些旧类 现在 当我将这两个 jars 包含在我的项目类路径中时 这给我带来了一个问题 因为它们的名称相同两个班级 但其中一个班级比另一个班级年长 并且行为方式不同
  • MyBatis 遵循 JPA 吗?

    作为我的第一个 ORM 我已经使用 myBatis 几个月了 现在我正在尝试学习其他东西 例如 Hibernate JPA 起初很难理解 Hibernate 和 JPA 之间的区别 经过几分钟的研究 我明白 JPA 只是一个规范 Hiber
  • 是否有更现代的面向对象版本的“让我们构建一个编译器”? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有更现代的 也许是面向对象的 相当于 Jack Crenshaw 的 让我们构建一个编译器 http
  • Android 上为什么会出现线程泄漏?

    我在 Android 应用程序中注意到 每次退出主屏幕时 堆大小 泄漏 都会增加 ByteArrayOutputStream 的量 我能做到的最好的办法就是添加 this mByteArrayOutputStream null 在 的最后r
  • SLF4J 日志级别作为参数[重复]

    这个问题在这里已经有答案了 我们希望使用 SLF4J 但我们发现的一件事是您无法将级别指定为参数 即 Logger log Level INFO messsage 你必须这样做 logger info message 这使得无法通过方法传递
  • Java 8 元空间垃圾收集

    我正在运行的 java 进程在运行的第一个小时左右始终表现良好 然而 性能会迅速下降 在分析时 我发现元空间垃圾收集相当频繁地发生 直到小时标记 然后失去控制 我相当确定我能够使用 XX MaxMetaspaceSize 选项来解决此问题
  • Python Blowfish 加密

    由于我对 Java 的了解不完整 我正在努力将此加密代码转换为 Python 代码 两者应该得到完全相同的结果 帮助将不胜感激 Java函数 import javax crypto Cipher import javax crypto sp
  • 使用Java 8开发的程序可以在Java 7上运行吗?

    我有点困惑 Oracle 表示 Java 8 与 Java 7 向后 高度兼容 但是 Java 8 程序有什么可能性可以在 Java 7 上成功运行 SE EE 呢 如果第一点为真 Java 8 应用程序将在 Java 7 服务器支持上部署
  • hibernate中映射到数据库表的bean的默认继承策略是什么?

    这是我在 stackoverflow 中的第一个查询 我想我正在提供所有必要的输入 我已经提供了我的 Java bean 和数据库表详细信息如下 Java Bean 类 import java sql Timestamp import ja
  • 异常中的错误代码与异常层次结构

    您认为在异常中使用错误代码来指定错误类型可以吗 请看一下这段代码 public class MyException extends Exception public static final String ERROR CODE INVALI
  • Java 错误:默认构造函数未定义隐式超级构造函数

    我有一些简单的 Java 代码 其结构与此类似 abstract public class BaseClass String someString public BaseClass String someString this someSt
  • JDK1.6 中 ManagementFactory 的托管 Mbean - NotCompliantMBeanException:

    我使用 ManagementFactory 来获取 JDK1 5 和 JBOSS 4 X 中的 ManagedMbeans 现在想将我的相同代码移至 JDK 1 6 Mbean 部分中断并抛出异常 引起原因 javax management

随机推荐

  • 我无法运行超过 100 个进程

    我有大量的 shell 命令通过授权服务的 AuthorizationExecuteWithPrivileges 调用以 root admin 权限执行 问题是 一段时间后 10 15 秒 可能是 100 个 shell 命令 程序停止响应
  • iOS 7 启动图像,仅在设备上显示黑屏

    我至少在 stakoverflow 检查了与此问题相关的所有问题 答案 但没有任何成功 到目前为止我的问题是 我创建了一个新的应用程序 目标 IOS 7 并且我在图像中添加了我的启动图像和我的应用程序图标 xcassets 文件夹 当我在模
  • Eigen:返回对带有编译时维度检查的矩阵块的引用

    我要问的是一个概括这个问题 https stackoverflow com questions 13548253 eigen library return a matrix block in a function as lvalue 具体来
  • 在 UITableViewCell 内编辑 UITextField 时禁用 UITableView 自动滚动

    我正在使用自定义UITableViewCell在我的里面UITableView 这些中的每一个UITableViewCells 相当高并且包含UITextField在顶部 当用户点击UITextField为了编辑它 会出现一个键盘 然后UI
  • C++ 中的静态函数调用非静态函数 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我有一堂课 比如 Class Tes
  • Spring 4 Websocket - 没有任何反应

    我正在学习 spring 4 websocket 如果有人可以指导我逐步学习 spring 4 websocket 或者可以推荐一些书籍 让我可以在其中找到有关上述主题的逐步实用方法 我将非常感激 但在此之前 我尝试使用 tomcat 8
  • 如何解释 PyPi 包名称中的命名约定

    这可以在许多软件包中找到 例如这个 https pypi python org pypi pip https pypi python org pypi pip pip 9 0 1 py2 py3 none any whl 如何解释这个命名约
  • Rails 4 - 如果条件不适用

    我想创建一个具有某些条件的范围 其中返回的不是特定范围 目前 该解决方案有效 scope my scope gt my var scope where TRUE if my var condition1 scope scope where
  • 是否有可用于 ASP.NET MVC 开发的附加库或工具?

    我的第一次经历ASP NET MVC实体框架引起了我对这个框架的兴趣 我想实现一些基本的应用程序 涵盖现实世界 Web 应用程序的基本要求 到目前为止 VS 2008 提供的支持已经令人印象深刻 然而 对于某些领域 使用现有的附加组件或各种
  • 通过 ES6 模块导入加载和使用旧版 JS 模块(例如 IIFE)

    I have IIFE https developer mozilla org en US docs Glossary IIFE旧应用程序中需要适用于 IE10 的某些库代码的函数 无 ES6 模块加载等 但是 我开始开发一个将使用 ES6
  • 如果我想添加 CSS 我应该将其粘贴到哪里?

    这是我需要添加 CSS 的页面 http upload wikimedia org wikipedia commons a a5 Map of USA with state names svg http upload wikimedia o
  • 如何从android中的recyclerView中删除项目

    在我的应用程序中 我应该使用 recyclerView 并删除一些项目 我想从中删除一些项目recyclerview为此 我在以下代码中编写Adapter public class MyAdapter extends RecyclerVie
  • Rails 数据禁用-带有重新启用按钮

    我有一个具有 JavaScript 验证功能的 Rails Devise 表单 当用户按下提交时 验证就会开始工作 并且用户会重新关注他们需要的表单 但是 rails 使用 data disable with 在单击按钮后禁用该按钮 因此在
  • 对函数中的变量进行分组

    我有一种感觉 这是如此明显 当 如果 解决时我会感到羞愧 但我就是无法让它发挥作用 我有一个 html javascript 页面 其中包含多个项目 所有项目都需要通过用户点击来显示或隐藏 所以我有 x 数量的 div 例如 div sty
  • 如何测试一个python模块是否已导入?

    如何测试Python中的模块是否已导入 例如我需要基础知识 if not has imported sys import sys also if not has imported sys path from sys import path
  • 在 std::map 中,获取一个指向不大于 key 的最后一个元素的迭代器

    提问前 我理解的意思std map lower bound http en cppreference com w cpp container map lower bound and std map upper bound http en c
  • 使属性可调用或不可调用

    我想让一个属性要么可调用 要么不可调用 例如 function Test var obj someString here is text Object defineProperty obj string get function retur
  • DB 连接字符串的 Windows 服务的 System.NullReferenceException

    我正在编写一个 Windows 服务 我使用 try 捕获了一个异常 try connStr System Configuration ConfigurationManager AppSettings connStr ToString ca
  • jQuery 插件多重实例化

    我正在使用发现的 jquery 插件样板here http jqueryboilerplate com 然而它提到构造函数可以防止多次实例化 我想知道我需要做什么才能修改它以允许多个实例化 插件样板如下 the semi colon bef
  • 注释看不见?

    这让我很困惑 我有一个带有自定义注释的类 但我似乎无法验证该注释是否存在 我在这里做错了什么 如果我跑MyOperationTest 见下文 我得到的结果是 implements Library Operation true has Lib