HackerTubewatch
Surprise me
Frame from Optional - The Mother of All Bikesheds by Stuart Marks Plays via YouTube's privacy-enhanced embed

Optional - The Mother of All Bikesheds by Stuart Marks

6 videos recommended on HN
YouTube
Cited on HN 3 times, 2019–2022, never outright recommended score 0
Years with an HN recommendation, 2007–2026

Cited as the authoritative explanation, from the person who added it to OpenJDK, of Optional's narrow intended purpose.

Stuart Marks explains the intended purpose and proper use of Java 8's Optional class and why it caused so much controversy. He gives guidelines for using its small API correctly.

“the guy who added it to OpenJDK” (HN, 2019)

3 citations · Talks · intermediate

3 Hacker News comments

From the HN archive; up to 20 kept per video, favoring different commenters. Recommendations first.

@kjeetgill Jun 2019 Cites it
on HN thread Takes: Java web framework without static methods or annotations
That's not really "why" it was introduced. Optional is used as a null wrapper in other JVM languages so that idiom bled over pretty naturally. Here's a talk "Optional - Mother of all Bikesheds" by Stuart Marks, the guy who added it to OpenJDK: [this video] It was mostly just meant to cover the zero or one case on fluent-style interfaces like the Streams API, so check as getFirst() or getAny(). In hindsight, the name Optional was a poor choice if they didn't want the idiom coming over.
Talk by the Optional author on its intended narrow purpose
@emccue Jun 2022 Cites it
on HN thread What I miss in Java, the perspective of a Kotlin developer
Read more
These are pretty weak arguments For the first point - val/var "More importantly, it doesn’t offer its immutable counterpart, val. You still need to add the final keyword, which nearly nobody uses." This super undermines the criticism. "It has the feature but people don't use it" isn't exactly much to write home about. Just use `final var` if you want. Make "final var over var" the same force culturally as JS's const over let" "However, the developers of Optional designed it for return values only. Nothing is available in the language syntax for methods parameters and return values. To cope with this, a bunch of libraries provides compile-time annotations:" This flow of causality here is slightly incoherent. The phrasing implies that if there was a version of optional that was designed for method parameters that would be better and there would be less of a need for compile-time annotations. Here it is sealed interface Option<T> { record Some<T>(T value) implements Option<T> {} record None<T>() implements Option<T> {} } This has "better" semantics than Optional for storing in fields and for using as method parameters. The existence of this does not obviate the desire to have null static analysis, so Optional really isn't that related. [this video] It is true though that Kotlin has a more consistent story here, but there are active efforts to improve it for Java. Also, the discussion of extension functions points out that static methods cannot be chained like instance methods - corre
Background on how Optional was designed and its intended use
@cratermoon Jul 2022 Cites it
on HN thread Rust should not have provided `unwrap`
See also the discussion for a similar feature in Java, from "Optional: The Mother of all Bikesheds", where the use and misuse of get() has a central role. video: [this video] slides: [link]
Discussion of get() misuse in Java's Optional, similar to unwrap

Video list and Hacker News comment labels from HackerTube (prompted by @karpathy), released under ODC-By 1.0, built on the open-index/hacker-news archive. Hacker News data is provided by Y Combinator; comments remain the work of their authors. Video titles, channel names and thumbnails belong to their creators and are shown via YouTube. HackerTube Watch is an unofficial edition. Data export of 2026-10-31.

Keyboard shortcuts

/
Search
j k
Next / previous video
r
Surprise me
l
Like (video page)
w
Watch later (video page)
?
This help
Esc
Close