JEP 495 Question

Brian Goetz brian.goetz at oracle.com
Thu Nov 7 19:40:42 UTC 2024


Yes, these were considered, and dismissed with prejudice, in part 
because the model implied by readInt and readDouble is a problematic 
one, because it greatly complicates the "reading state" that has to be 
understood by the user (e.g., what if there's no digits on the line, 
does it read another line?  what if the digits end mid-line, does it 
leave the cursor there?  what if it consumes all the characters on the 
line, and then you read a string?)  These are issues that invariably 
trip up beginners and experienced users alike.

The locution you suggest, which is to use readln() to read a line into a 
String, then parseInt() to convert to an int, is more wordy than some of 
the alternatives, but much clearer and simpler as to what is going on, 
because it composes two simple functions (read a string, convert a 
string to an int).  This is good for beginners, because they can see 
that there are steps here to get the data into the form they want.  The 
readInt() method provides the illusion of simplicity, but ends up moving 
significant complexity to where we are more likely to trip over it in 
the dark.

I'm not saying there will never be a richer way to do this, but 
readInt() and friends are definitely not it.

More generally, one of the worst things about creating an IO class is 
that it immediately becomes  target for a flood of "can you just add my 
one favorite method" requests.  We might add a few more methods to it in 
the next decade.  But we also might not; less is more.


On 11/7/2024 12:06 PM, Barry Burd wrote:
> I see that parameterless println() and readln() methods are being 
> added to java.io.IO in JEP 495. I'm still wondering if there's been 
> any thought to including methods like readInt and readDouble. In the 
> early stage of an introduction to Java, it's common to have the 
> student input int values and double values for simple examples. With 
> the current spec, the best way to do this (as far as I can see) is
>
>       var n = Integer.parseInt(readln("Enter a number"));
>
> It seems natural to simplify this with a readInt method, and the 
> addition of such a method wouldn't weigh heavily on the java.io.IO 
> package.
> Any thoughts?
>   --Barry
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/amber-dev/attachments/20241107/1613eae1/attachment.htm>


More information about the amber-dev mailing list