相关疑难解决方法(0)

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

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

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

java nullable optional java-8

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

如何区分Spring Rest Controller中部分更新的null值和未提供值

我试图在Spring Rest Controller中使用PUT请求方法部分更新实体时,区分空值和未提供的值.

以下面的实体为例:

@Entity
private class Person {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    /* let's assume the following attributes may be null */
    private String firstName;
    private String lastName;

    /* getters and setters ... */
}
Run Code Online (Sandbox Code Playgroud)

我的人员库(Spring Data):

@Repository
public interface PersonRepository extends CrudRepository<Person, Long> {
}
Run Code Online (Sandbox Code Playgroud)

我使用的DTO:

private class PersonDTO {
    private String firstName;
    private String lastName;

    /* getters and setters ... */
}
Run Code Online (Sandbox Code Playgroud)

我的Spring RestController:

@RestController
@RequestMapping("/api/people")
public class PersonController {

    @Autowired
    private PersonRepository people; …
Run Code Online (Sandbox Code Playgroud)

java rest json spring-mvc jackson

27
推荐指数
4
解决办法
5211
查看次数

为什么实例变量没有使用可选的?

我已经阅读了很多有关Optional应该使用的案例的信息。

我读过的很多页面都说Optional不应将其用于私有实例变量,而应由getter返回。

我本以为将私有实例变量作为可选变量仍然有用。如果有人查看我的代码,他们可以看到值可以为空,而不必检查文档以查看是否可以返回null。

在Scala中,从不使用null,只有在与Java互操作的情况下才使用null。如果值可以为null,建议始终使用可选值。这种方法对我来说更有意义。

这是提及它的页面:

https://blog.joda.org/2015/08/java-se-8-optional-pragmatic-approach.html

这是示例代码。

private final String addressLine;  // never null
private final String city;         // never null
private final String postcode;     // optional, thus may be null

// normal getters
public String getAddressLine() { return addressLine; }
public String getCity() { return city; }

// special getter for optional field
public Optional<String> getPostcode() {
  return Optional.ofNullable(postcode);
}
Run Code Online (Sandbox Code Playgroud)

我可以看到的唯一好处是,如果您要序列化对象,则现在可以实现,因为它不会在变量中存储可选内容。

缺点是,在检查getter的返回类型之前,您不知道邮政编码可以为null。如果您不熟悉该代码,则可能会错过此添加操作,从而扩展了类,从而导致空指针异常。

这是一个有关Scala的问题Option

何时使用选件

为什么Java和Scala在使用可选方式方面有区别?

java scala optional

8
推荐指数
2
解决办法
335
查看次数

标签 统计

java ×3

optional ×2

jackson ×1

java-8 ×1

json ×1

nullable ×1

rest ×1

scala ×1

spring-mvc ×1