相关疑难解决方法(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 8的Optional不能在参数中使用

我在许多网站上阅读过Optional只能用作返回类型,而不能在方法参数中使用.我很难找到合乎逻辑的原因.例如,我有一个逻辑,它有2个可选参数.因此,我认为像这样编写我的方法签名是有意义的(解决方案1):

public int calculateSomething(Optional<String> p1, Optional<BigDecimal> p2 {
    // my logic
}
Run Code Online (Sandbox Code Playgroud)

许多网页指定Optional不应该用作方法参数.考虑到这一点,我可以使用以下方法签名并添加一个清晰的Javadoc注释来指定参数可能为null,希望将来的维护者将读取Javadoc,因此在使用参数之前始终执行空值检查(解决方案2) :

public int calculateSomething(String p1, BigDecimal p2) {
    // my logic
}
Run Code Online (Sandbox Code Playgroud)

或者,我可以用四种公共方法替换我的方法以提供更好的界面并使其更明显p1和p2是可选的(解决方案3):

public int calculateSomething() {
    calculateSomething(null, null);
}

public int calculateSomething(String p1) {
    calculateSomething(p1, null);
}

public int calculateSomething(BigDecimal p2) {
    calculateSomething(null, p2);
}

public int calculateSomething(String p1, BigDecimal p2) {
    // my logic
}
Run Code Online (Sandbox Code Playgroud)

现在我尝试编写类的代码,为每种方法调用这条逻辑.我首先从另一个返回Optionals的对象中检索两个输入参数然后调用calculateSomething.因此,如果使用解决方案1,则调用代码将如下所示:

Optional<String> p1 = otherObject.getP1();
Optional<BigInteger> p2 = otherObject.getP2();
int result = myObject.calculateSomething(p1, p2);
Run Code Online (Sandbox Code Playgroud)

如果使用解决方案2,则调用代码将如下所示:

Optional<String> …
Run Code Online (Sandbox Code Playgroud)

java optional java-8

344
推荐指数
12
解决办法
13万
查看次数

java.util。@ Nullable是什么意思?

我正在阅读番石榴的代码,在其中找到了java.util.@Nullable一些代码中的注释。我知道的含义@Nullable,但我不理解。特别是,我Nullable在package中找不到一个名为的类java.util。拜托,有人告诉我这是什么意思java.util.@Nullable

public static <T> java.util.@Nullable Optional<T> toJavaUtil(
    @Nullable Optional<T> googleOptional) {
  return googleOptional == null ? null : googleOptional.toJavaUtil();
}
Run Code Online (Sandbox Code Playgroud)

java

56
推荐指数
3
解决办法
2030
查看次数

调试nullPointerException的好方法

我在java中使用eclipse和编程.有时我遇到一个会让我困扰几个小时的nullPointerException.无论如何,更好地调试nullPointerExceptions并找出哪些变量值和其他会导致空指针异常的事情.

java debugging nullpointerexception

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

在Java中使用@Nullable

我有一个关于@NullableJava 中注释用法的问题.

根据我的阅读,设置可能返回null值的方法是一种很好的做法.通过这种方式,IDE可以帮助检测一些空指针异常错误,或建议删除不必要的空指针异常检查(如果@NotNull使用).

到目前为止这么好,但是如何使用@Nullable方法参数?这是一个好的做法还是代码变得更加冗长(如果与之一起使用final)并且可能会遗漏好处,因为您并不总是知道将哪些参数传递给函数调用?另外,您对使用@Nullablesetter方法有何看法?

用法与在公司工作时的情况有关,而与小型项目(如家庭作业)有关.

java

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

Guice @Nullable注释

在我的服务中,我有一个受保护的构造函数@Inject和一个参数(提供者)@Nullable.任何想法,为什么我得到

com.google.inject.CreationException: Guice creation errors:
1) No implementation for [[service]] was bound.

?Guice是3.0pre1,@Nullable是我们的.

java nullable guice

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