相关疑难解决方法(0)

我应该使用哪个@NotNull Java注释?

我希望使我的代码更具可读性,并使用IDE代码检查和/或静态代码分析(FindBugs和Sonar)等工具来避免NullPointerExceptions.许多工具似乎与彼此的@NotNull/ @NonNull/ @Nonnull注释不兼容,并列出我的代码中的所有这些工具都很难阅读.有什么建议是"最好的"吗?这是我发现的等效注释列表:

  • javax.validation.constraints.NotNull
    创建用于运行时验证,而不是静态分析.
    文件

  • edu.umd.cs.findbugs.annotations.NonNull
    Findbugs静态分析使用,因此Sonar(现为Sonarqube)
    文档

  • javax.annotation.Nonnull
    这可能也适用于Findbugs,但JSR-305处于非活动状态.(另请参阅:JSR 305的状态是什么?) 来源

  • org.jetbrains.annotations.NotNull
    由IntelliJ IDEA IDE用于静态分析.
    文件

  • lombok.NonNull
    用于控制Project Lombok中的代码生成.
    占位符注释,因为没有标准.
    来源, 文档

  • android.support.annotation.NonNull
    Android中提供的标记注释,由support-annotations包
    文档提供

  • org.eclipse.jdt.annotation.NonNull
    Eclipse用于静态代码分析
    文档

java ide null annotations nullpointerexception

918
推荐指数
20
解决办法
27万
查看次数

Java注释

Java中注释的目的是什么?我把这些模糊的想法放在评论和实际代码之间.它们是否在运行时影响程序?

它们的典型用法是什么?

它们是Java独有的吗?是否有C++等价物?

java glossary annotations

111
推荐指数
5
解决办法
3万
查看次数

RetentionPolicy CLASS与RUNTIME

RetentionPolicy.CLASS和之间有什么实际区别RetentionPolicy.RUNTIME

看起来两者都记录在字节码中,无论如何都可以在运行时访问它们.

java annotations

44
推荐指数
2
解决办法
2万
查看次数

Java Annotations - 寻找RetentionPolicy.CLASS的示例

根据Java Annotation API:

  • RetentionPolicy.CLASS注释将由编译器记录在类文件中,但在运行时不需要由VM保留.

  • RetentionPolicy.RUNTIME注释将由编译器记录在类文件中,并在运行时由VM保留,因此可以反射性地读取它们.

我正在寻找"CLASS"保留政策的样本.当我们需要使用此策略而不是RUNTIME策略时.

java annotations

21
推荐指数
4
解决办法
7293
查看次数

java.lang.annotation.Retention的原因是什么?

我很清楚它的含义RetentionPolicy并且知道它们的作用以及何时使用它们似乎是有意义的.对于我自己的注释,我确切地知道它们是在运行时,类文件中还是仅仅用于编译时需要的.但是,使用库中定义的任何注释,您可以恕我直言.

例如,javax.annotation.Generated意味着标记生成的代码,但它很少有用.由于有更多的AFAIK工具对字节码比与源工作工具工作,这些信息就会消失,可以使用之前它.

由于在运行时缺少注释不会抛出 ClassNotFoundException(不像例如,缺少接口),使用RetentionPolicy.RUNTIME似乎不会造成伤害.还是我错了?

或者节省了几个字节使用不同Retentions 的原因?对我来说,这似乎导致太多问题值得.我错过了什么?

java annotations retention

18
推荐指数
2
解决办法
2009
查看次数

RetentionPolicy.CLASS和RetentionPolicy.SOURCE有什么用?

RetentionPolicy.CLASS和RetentionPolicy.SOURCE的预期需求是什么.在哪个注释场景中,我们可以使用这些?我想要一些例子.

来自Java doc:

CLASS:注释将由编译器记录在类文件中,但在运行时不需要由VM保留.

  • 在哪种情况下,我们会以开发人员身份进行此操作?

SOURCE:编译器将丢弃注释.

  • 在哪种情况下,我们会以开发人员身份进行此操作?

java annotations

5
推荐指数
1
解决办法
775
查看次数

Java注释会抛出NullPointerException.

不知道我在这里做错了什么.我的目标是获取方法的注释(如果存在).

public class RunTest
{
public static void main(String[] args) throws Exception, NoSuchMethodException
{
    MyAction action = new MyAction(); 

    Method method = action.getClass().getDeclaredMethod("printSomething");

    RequiredPermission permission = method.getAnnotation(RequiredPermission.class);
    String value = permission.permissionName();

    System.out.println("permission name: "+value);

}
}
Run Code Online (Sandbox Code Playgroud)

MyAction类

public class MyAction
{
@RequiredPermission(permissionName="SYSO", permissionValue = 0)
public void printSomething()
{
    System.out.println("hi there");
}

public void printABC()
{
    System.out.println("ABC...");
}
}
Run Code Online (Sandbox Code Playgroud)

和注释:

public @interface RequiredPermission
{
    String permissionName();
    int permissionValue();
}
Run Code Online (Sandbox Code Playgroud)

我希望在控制台上看到:

权限名称:SYSO

但相反,我得到:

com.annotation.RunTest.main(RunTest.java:14)中线程"main"java.lang.NullPointerException中的异常

java annotations

1
推荐指数
1
解决办法
977
查看次数

检查方法上是否存在 @Override 注释

我有一个 java.lang.reflect.Method 方法,我想检查它是否用 @Override 注释标记。

尝试使用 method.isAnnotationPresent(Override.class) 执行此操作,但此方法不适用于此注释。还尝试了 MergedAnnotations.from(method).isPresent() 但它也不会为我的带有 @Override 的方法返回 true 。

可以检查一下吗?

java reflection overriding

0
推荐指数
1
解决办法
107
查看次数