- Scattered null-checks: sad!
- Things null can mean:
- Value was never initialised (whether accidentally or on purpose)
- Value is not valid
- Value is not needed
- No such value exists
- Something went terribly wrong and something that should be there is not
- Probably dozens of other things. Some avoidable if you’re disciplined/use linter
Optionalsolved the case of: no such value exists
- Smell: return null. Solution:
@NotNullannotation for guard clause based null return. Explicit null return solvable with
- Return an exception in exceptional case! Don’t return null!
- Field-level null can be acceptable. Make sure it’s well understood and well-documented what can be null and why