相关疑难解决方法(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.lang.annotation.RetentionPolicy常数SOURCE,CLASSRUNTIME

我也不完全确定"保留注释"这个短语是什么意思.

java annotations

167
推荐指数
4
解决办法
6万
查看次数

Java注释

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

它们的典型用法是什么?

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

java glossary annotations

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

Java Annotations - 寻找RetentionPolicy.CLASS的示例

根据Java Annotation API:

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

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

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

java annotations

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

如何在使用javaassist创建.class文件时将@Override注释添加到方法?

如何@Override使用javaassist创建类时向方法添加注释?

ClassPool pool = ClassPool.getDefault();
CtClass ctClasz = pool.makeClass("test.ExampleImpl");
ctClasz.addInterface(pool.get(MyInterface.class.getName()));
CtMethod method = CtNewMethod.make ("@Override public void print() { System.out.println(\"Hello!    \"); }", ctClasz);
ctClasz.addMethod(method);

System.out.println("Implementd: Interfaces:" + ctClasz.getInterfaces());
System.out.println("Methods: " + ctClasz.getMethods());
ctClasz.writeFile("D:");
Run Code Online (Sandbox Code Playgroud)

此代码抛出异常如下:

 Exception in thread "main" javassist.CannotCompileException: [source error] syntax error    
 near "@Override p"
at javassist.CtNewMethod.make(CtNewMethod.java:78)
at javassist.CtNewMethod.make(CtNewMethod.java:44)
at javaassist.Demo.main(Demo.java:17)
 Caused by: compile error: syntax error near "@Override p"
at javassist.compiler.Parser.parseClassType(Parser.java:983)
at javassist.compiler.Parser.parseFormalType(Parser.java:191)
at javassist.compiler.Parser.parseMember1(Parser.java:51)
at javassist.compiler.Javac.compile(Javac.java:89)
at javassist.CtNewMethod.make(CtNewMethod.java:73)
... 2 more
Run Code Online (Sandbox Code Playgroud)

java javassist

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

如何在java中的注释字段中设置值?

我的注释类

@Target({java.lang.annotation.ElementType.FIELD})
@Retention(RetentionPolicy.CLASS)
public @interface Base {
    int[] value();
}
Run Code Online (Sandbox Code Playgroud)

实际课程

public class Demo {
    @Base(1)
    public int var;
    public int var2;
    public void call() {
        InjectingClass.inject(this);
        System.out.print(var + "");
    }
}
Run Code Online (Sandbox Code Playgroud)

如何设置值onevar,而不是在var2

java

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