我有以下Java代码-
import java.lang.reflect.Field;
public class AnnotationTest
{
public @interface Size
{
int size();
int location();
}
@Size(size = 40, location = 85)
private String firstName;
@Size(size = 1, location = 21)
private String middleInitial;
@Size(size = 50, location = 115)
private String lastName;
public static void main(String[] args)
{
AnnotationTest t = new AnnotationTest();
Class<? extends AnnotationTest> classInstance = t.getClass();
for (Field f : classInstance.getDeclaredFields())
{
Size s = f.getAnnotation(Size.class);
int size = s.size(); // this is line 29
int location = s.location();
System.out.println("size = "+ size);
System.out.println("location = "+location);
}
}
}
我得到的错误是
Exception in thread "main" java.lang.NullPointerException
at com.stackoverflowx.AnnotationTest.main(Demo.java:125
如何正确访问注释字段?
默认情况下,注释在运行时不可用。您需要添加@Retention(RetentionPolicy.RUNTIME)
到注释定义以使其可用于运行时处理。例如:
@Retention(RetentionPolicy.RUNTIME)
public @interface Size {
在实践中,还应Field.isAnnotationPresent
在实际尝试从字段中删除注释之前,检查该字段是否确实具有给定的注释。
另外,指定注释所属的元素类型也是一种好习惯@Target
。因此,您的示例将是:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Size {
我想用java为创建自定义注释。我想用这个注释比较两个字符串值,比较后会返回一个
我有一个实体类称为和一个仓库声明如下: 自定义存储库的定义如下: 和 下面是另一个堆栈溢出问题中描述的内容:如何向Spring数据JPA添加自定义方法 现在,IntelliJ给了我一个警告: 我尝试将这些注释添加到中,但没有一个成功: 但都不管用。显然有些是错的,但我在试验。正确的注释是什么。 使用,我得到了以下错误:
下面是Lombok的注释的java文档: 如果加上一个参数,lombok将在方法/构造函数主体的开头插入一个空检查,抛出一个{@code NullPointerException},参数名作为消息。如果放在字段上,任何为该字段赋值的生成方法也将生成这些空检查。请注意,任何名为{@code NonNull}且带有任何大小写和任何包的注释都将导致为生成的方法生成nullchecks(并且注释将被复制到
我有一个自定义注释,如下所示 我定义了一个方面来包装实际的方法调用 注释的用法如下所示 到目前为止,这工作得很好,我可以在TestableAspect#InvkeAndLog中实现我的登录。 现在我需要验证eg的索引值不大于10。 我可以在运行时通过更改方面实现来实现,如下所示 但这需要至少调用一次API,而且效率不高。是否有一种方法可以在spring启动应用程序启动时执行此操作?
问题内容: 我为我写了一个 对于每个我使用以下注释 因此,我决定定义自己的注释女巫,其中包含所有这样的注释 然后,我只用了一个注释 修改后,测试失败 为了使其再次工作,需要我将其添加到 我的问题是为什么我的注释包含注释时不起作用?注释有什么特别之处吗?还是我错过了什么? PS:我使用相同的方法,它们也很好用。 问题答案: 这种机制是Spring框架特有的,在这种机制中,您可以使用本身带有其他注释的