RFR: 8305457: Implement java.io.IO [v3]
Pavel Rappo
prappo at openjdk.org
Wed May 8 18:28:52 UTC 2024
On Wed, 8 May 2024 16:06:29 GMT, Stuart Marks <smarks at openjdk.org> wrote:
> Most of these are defined in terms of `String.valueOf(Object)` which if passed a null reference will return the String object containing `null`. So no, I don't think NPE should be thrown. It might be worth mentioning this explicitly somewhere though.
Right, in our current model, `Console.readln(prompt)` can be reduced to `Console.print(prompt)` followed by actual reading. `Console.print(prompt)` can in turn be reduced to printing the result of `String.valueOf((Object) prompt)`, which is a string "null".
The above reduction means that `Console.readln(null)` will not throw NPE. Now, what I'm asking if that's what we really want.
With `Console.println(null)` and `Console.print(null)` not throwing NPE makes sense. However, with `Console.readln(null)` it might not. After all, we ask for a **`String`** prompt, not an `Object` prompt. All other methods of `Console` that accept `String`, throw NPE if that string is null.
One more consideration. Whatever the behaviour we choose for `Console.readln(null)`, we should choose the same behaviour for `IO.readln(null)`. Otherwise, it would be a constant source of unpleasantly surprising inconsistency.
Thoughts?
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/19112#discussion_r1594464589
More information about the core-libs-dev
mailing list