问题标签 [java-annotations]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
262 浏览

java - 如何使用 Java 推断自定义注释中的信息

我创建了一个名为 CrudSearchable 的自定义注释,并在那里定义了一些属性。但是,我分配的属性已经从 bean 中可见。有没有一种方法可以获取这些值而无需手动重新定义它们?

其中,attribute 是属性名称,parentClass 是使用注解的类字面量,映射类是嵌套类对象(如果适用)。

0 投票
2 回答
9345 浏览

java - 注释可以限制java中类字段的字符吗?

我正在使用 java 1.8、Spring Boot 和 MongoDb 将一些数据存储在数据库中以了解 mongoDb

我想通过注释来限制类字段的字符我试图用hibernate-validator控制它:

但是当我将它插入到 mongodb 中时,代码如下:

当 Panteraaaaaa 的长度大于 7 并且 Heavy Metalllllllllllllllll 相同时,它确实可以正常工作

我附上了与我的 pom.xml 对应的以下代码

要实现这个问题,可以通过注解来控制java中字段的字符长度吗?或者我需要做一个方法来控制它

0 投票
0 回答
282 浏览

java - apache spark:在实例化新执行程序时运行初始化脚本的最佳方法是什么

我正在使用自定义 dropwizard 指标源和报告器。当我直接调用指标而不是通过指标注释时,一切都很好。

在下面的代码中,对 testTimer 的调用无需使用 Spark Metrics 注册源即可工作(我的自定义源是一个对象,它在其末尾调用了 register 方法,该方法会根据需要进行初始化)

但不幸的是,如果没有为每个执行程序手动注册源,这对于指标注释不起作用(如预期的那样)(指标系统不知道我的自定义源/报告器,我们需要这样通知)。

在下面的示例中(顺便说一下),我正在使用 sc.parrallelige 但在现实世界的应用程序中我们不能使用这种方法(尤其是在使用 spark.dynamicAllocation.enabled 时),而是我们需要注册一个 spark 监听器( addSparkListener 然后覆盖 onExecutorAdded)。

鉴于这种情况,我如何告诉 spark 在添加执行程序时调用我的 register() ?(并取消注册 onExecutorRemoved)

0 投票
3 回答
1401 浏览

java - 在类路径中有 log4j-core 时“@throws 的使用无效”编译错误

大约一周前,我们开始在测试中遇到此错误。它一直在开启和关闭——有时人们会得到它,而有时他们不会。

我想错误信息有点模糊。无效怎么办?代码对我来说看起来不错:

我们确实在编译期间打开了doclint,因为我们想查找有关Javadoc 错误的信息,而不必单独运行Javadoc。

这个错误到底是什么意思?我们在这里所做的有什么无效的吗?我们是否正在查看编译器错误?当然,像这样的错误会打击第一个试图声明方法抛出异常的人...... :(

目前调查...

  • 我设法将示例缩减为一个给出相同错误的简单项目。除了 Travis CI 能够在 Linux 上重现它之外,我可以在 macOS 上重现它,从今天开始(不知道为什么这是时间相关的!)Windows 上的其他用户已经讨论了几天了。
  • 从这个项目中,我查看了 Gradle 用于 javac 的命令行,并设法得到相同的错误,以显示直接调用 javac。
  • 进一步减少 javac 命令行:

    这说明在图片中没有Gradle的情况下问题依然存在。(Gradle 也添加-processorpath-g。)

0 投票
1 回答
654 浏览

java - Java Annotation - 限制具有相同字段元素值的注释的基数(出现)

我有以下条件,它需要具有特定字段值的 Java 注释在类的任何字段中只出现一次。Java 8可以吗?

我的注释

使用注释的类就像

我想要的只是防止程序员使用类似的东西

具有特定ID @TestAnnotation(id="test2")的相同注释不能在字段上使用两次。至少在类中的应用字段中id="..."应该是唯一的。@TestAnnotaion

0 投票
0 回答
816 浏览

java - Java Annotation - 使用 Bean introspector 访问私有字段上的注释(不使用 Field 对象)

在将其标记为重复之前,请注意这是具有特定场景的非常具体的问题,我已经在论坛上进行了广泛搜索以获取任何答案线索。在报告重复之前,请确保在其他线程中完全解决了这篇文章中的查询。

我有以下情况:

带有 RUNTIME 保留策略的注释

它被用作

现在在其他课程中,我正在尝试使用

但是 myAnno 的值是 Null。但是,如果我使用Class.forName("TestBean").getDeclaredFields()[1].getAnnotation(TestAnnotation.class); 我能够获得价值。这意味着 RUNTIME 保留正在工作。

我只需要关于如何使用 Bean Introspection 来获取注释的帮助。我不想使用getDeclaredFields,所以请把它作为一种可能性。

0 投票
0 回答
109 浏览

java - 注释处理器:有没有办法知道带注释的类是否扩展了特定的类?

我想检查是否有任何带注释的类的祖先实际上是android.support.v4.app.Fragment.

目前我写了一个递归方法来做到这一点。

我想知道是否有更好的方法来做到这一点?

主要目的是限制我的注释被添加到任何类中。

我也用squareup.javapoet.

0 投票
0 回答
613 浏览

java - Java Annotation 能否从方法中获取值,然后为该方法返回另一个值

这是我的 POJO。

这是我的注释

我想要做的是:在我的 pojo 的 Getter 方法上放置一个掩码注释,并希望 getter 返回一些与对象字段不同的值,比如说我的投资者名字是“Mike”,但我已经在上面放了一个 MaskName 注释,所以每当我调用 getInvestorName() 方法时,它应该返回一个掩码值 (xxxx) 。

我该如何实现这一点,是否可以使用自定义注释来实现这一点

0 投票
3 回答
72 浏览

java - 实现方法时有什么方法可以包含接口的名称

实现方法时有什么方法可以包含接口的名称吗?如果我必须实现 3 个接口,那么很难提醒我实现的方法来自哪里。

如果我需要 2 个接口来实现相同的方法名称。我怎样才能知道我正在实施哪种方法?

谢谢

0 投票
1 回答
104 浏览

java - 从调用堆栈中检索最顶层注释的函数

我想定义一个抽象基类,它定义了我想在测试各种 API 时一遍又一遍地实现的通用可重用测试用例。这个想法是定义一次测试,然后我可以从通用测试继承以获得测试定义,而我的测试代码所要做的就是实现如何执行测试的细节。这样我就不会错过好的测试用例,当我想出另一个好的测试用例来测试时,我不必重新发明轮子,也不必在几十个地方进行更改。

本质上,我正在做参数化测试,其中参数是在基类中定义的。预期结果也在基类中定义。但是,有时需要覆盖预期结果。例如,一个普通的字符串字段可能允许任何字符,而一个对象名称字段可能(或在我的情况下)限制哪些字符是合法的。例如,字符串字段允许“?” 在值中,名称字段没有。

我试图找出一种在基类中定义参数 ONCE 的干净方法,并且只定义一次预期结果,但可以选择在上下文需要的实现类中覆盖它。

我遇到的问题是,当您覆盖一个方法时,您必须替换它的实现。你不能只替换它的一部分。我想在不覆盖参数部分的情况下替换预期结果。我也不认为将每个测试分成两种方法是一种干净或理想的解决方案,一种提供参数,另一种定义预期行为。

我正在考虑的一种选择是使用注释来定义预期结果。然后我可以覆盖注解,然后将实现委托给基类实现。只要基类使用注释来决定如何表现,它就应该起作用。

例如:(在伪代码中,不是真正的 Java)

鉴于这种层次结构,foo.test1()bar.test1()baz.test1()都做完全相同的事情。而foo.test2()做一件事,又做另一bar.test2()件事baz.test2()。同样,foo.test3()bar.test3()一件事,却baz.test3()会有所不同。

我可以使用注释来完成此行为吗?如果是这样,isFubar会是什么样子?我还没有看到方法名称未知的这种反射的示例。

作为旁注,如果有一种更清洁的方法来完成预期的行为,我很乐意听到它是什么。