FasterXML / FasterXML/jackson-modules-java8

Absent nested optional shennanigans

オープン
#310 コメント 1 件 リアクション 0 件 担当者 0 名 GitHub で見る
主要言語
Java
スター
425
フォーク
124
PR マージ指標
30日以内にマージされた PR はありません

説明

Uh... so this is partially for science, I guess. It's obscure enough to not matter, but I'd like to understand the reasoning. I stumbled upon this because I am working on a smaller databind library myself and of course I'm always comparing to Jackson for sensible defaults. Observe the following:

```java
record R(Optional> s) { }

R r = new ObjectMapper()
.registerModule(new Jdk8Module())
.readValue("{}", new TypeReference<>() {});

assertFalse(r.s.isPresent());
```

Here, an `Optional>` property is absent from the JSON to deserialize. Naively, I expected the property to be set to an empty optional, but actually it's `Optional.of(Optional.empty())`, so the snippet above crashes.

I didn't find any tests which explicitly cover this here, so I guess it wasn't really considered a worthwhile edge case. But I think following through with these weird cases helps in figuring out consistent behaviour in general. Do you think that the current behaviour (`Optional.of(Optional.empty())`) is correct or do you think `Optional.empty()` would be correct?

コントリビューションガイド

このリポジトリのコントリビューションガイドは索引されていません

評価

この issue はまだ評価されていません。

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。