相关疑难解决方法(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 optional-parameters

763
推荐指数
11
解决办法
87万
查看次数

@Nullable注释用法

我在java中看到一些方法声明为:

void foo(@Nullable Object obj)
{ ... }
Run Code Online (Sandbox Code Playgroud)

这是什么意思@Nullable?这是否意味着输入可能是null?没有注释,输入仍然可以为空,所以我猜这不仅仅是它吗?

谢谢

java annotations

329
推荐指数
4
解决办法
20万
查看次数

Java 8 getter应该返回可选类型吗?

Optional Java 8中引入的类型对于许多开发人员来说是一件新事物.

一个getter方法返回Optional<Foo>类型代替经典的Foo一个好习惯吗?假设值可以null.

java nullable optional java-8

267
推荐指数
4
解决办法
5万
查看次数

用于可选

现在已经使用Java 8超过6个月左右,我对新的API更改感到非常满意.我仍然不自信的一个领域是什么时候使用Optional.我似乎想要在任何可能的null地方使用它,而且无处可去.

似乎有很多情况我可以使用它,我不知道它是否增加了好处(可读性/无效安全性)或只是导致额外的开销.

所以,我有一些例子,我对社区是否Optional有益的想法感兴趣.

1 - 当方法可以返回时作为公共方法返回类型null:

public Optional<Foo> findFoo(String id);
Run Code Online (Sandbox Code Playgroud)

2 - 当参数可能是null以下时作为方法参数:

public Foo doSomething(String id, Optional<Bar> barOptional);
Run Code Online (Sandbox Code Playgroud)

3 - 作为bean的可选成员:

public class Book {

  private List<Pages> pages;
  private Optional<Index> index;

}
Run Code Online (Sandbox Code Playgroud)

4 - 在Collections:

一般来说,我不认为:

List<Optional<Foo>>
Run Code Online (Sandbox Code Playgroud)

添加任何东西 - 特别是因为可以使用filter()删除null值等,但是Optional在集合中是否有任何好的用途?

我错过了什么案例?

java optional java-8

242
推荐指数
7
解决办法
8万
查看次数

在javax.annotation中找不到@Nullable.*

我想用@Nullable 注释来消除NullPointerExceptions.我在网上找到了一些教程,我注意到这个注释来自包javax.annotation.Nullable; 但是当我导入它时会产生编译错误:无法找到符号

java annotations nullable nullpointerexception null-pointer

102
推荐指数
6
解决办法
10万
查看次数

查询方法中的Spring Data可选参数

我想在存储库层中编写一些查询方法.此方法必须忽略null参数.例如:

List<Foo> findByBarAndGoo(Bar barParam, @optional Goo gooParam);
Run Code Online (Sandbox Code Playgroud)

此方法必须通过以下条件返回Foo:

bar == barParam && goo == gooParam;
Run Code Online (Sandbox Code Playgroud)

如果gooParam不为null.如果gooParam为null,则条件更改为:

bar == barParam;
Run Code Online (Sandbox Code Playgroud)

有什么解决方案吗?有人能帮我吗?

spring hibernate jpql spring-data spring-data-jpa

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

java.util.Objects vs可选哪个更好?

java.util.Objects类被延长了一些新的方法

对象#requireNonNullElse

分别

对象#requireNonNullElseGet() in Java-9.

如果第一个参数为非null,则它们将返回第一个参数,否则返回非null的第二个参数或者supplier.get()的非null值

jshell> String nullStr = null;
nullStr ==> null

jshell> Objects.requireNonNullElse(nullStr,"lorem ipsum");
$13 ==> "lorem ipsum"

jshell> Objects.requireNonNullElseGet(nullStr,() -> "lorem ipsum");
$14 ==> "lorem ipsum"
Run Code Online (Sandbox Code Playgroud)

但是新功能与Optional#orElseOptional#orElseGetOptional类中已存在的功能重叠

jshell> Optional.ofNullable(nullStr).orElse("lorem ipsum");
$17 ==> "lorem ipsum"

jshell> Optional.ofNullable(nullStr).orElseGet(() -> "lorem ipsum");
$18 ==> "lorem ipsum"
Run Code Online (Sandbox Code Playgroud)

新方法Objects和相应Optional方法之间的唯一区别是供应商的第二个参数或值必须为非null否则Objects抛出NPE:

jshell> Objects.requireNonNullElseGet(nullStr,() -> null);
|  java.lang.NullPointerException thrown: supplier.get()
|        at Objects.requireNonNull (Objects.java:246)
|        at Objects.requireNonNullElseGet …
Run Code Online (Sandbox Code Playgroud)

java optional java-9

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

在Java中从Optional-> List-> List转换的链方法

我有一个Optional包含列表的对象.我想将此列表中的每个对象映射到另一个列表,并返回结果列表.

那是:

public List<Bar> get(int id) {
    Optional<Foo> optfoo = dao.getById(id);
    return optfoo.map(foo -> foo.getBazList.stream().map(baz -> baz.getBar()))
}
Run Code Online (Sandbox Code Playgroud)

如果没有溪流内的溪流,有没有一种干净的方式呢?

我认为这flatMap可能是解决方案,但我无法弄清楚如何在这里使用它.

java optional java-8 java-stream

12
推荐指数
2
解决办法
3188
查看次数

Request Param 的可选参数是一种不好的做法吗?

我在 Rest 控制器中使用可选参数,在我的例子中是为了区分要调用的方法:

@GetMapping("/cars")
@ResponseBody
public List<CarsDTO> getAllCarsByCat(@RequestParam Optional<Integer> cat1,
                                     @RequestParam Optional<Integer> cat2) {
    if (cat1.isPresent() && cat2.isPresent())
        return carsService.getAllCarsByCat1AndCat2(cat1.get(), cat2.get());
    else if (cat1.isPresent())
        return carsService.getAllCarsByCat1(cat1.get());
    else if (cat2.isPresent())
        return carsService.getAllCarsByCat2(cat2.get());
    else
        return carsService.getAllCars();

}
Run Code Online (Sandbox Code Playgroud)

为什么下面线程的最高投票响应提出“使用可选参数在方法内部导致条件逻辑实际上是适得其反的。”?

为什么Java 8的Optional不能在参数中使用

我正是这样做的,并将其视为最具可读性和直接的解决方案。这种方法有什么不好?

java spring java-8 option-type

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