8207690: Parsing API for classpath and similar path strings

Alan Bateman Alan.Bateman at oracle.com
Thu Sep 13 07:33:25 UTC 2018


On 11/09/2018 17:04, Stephen Colebourne wrote:
> :
> This is a broader question for new methods in the JDK, not just this
> one. I don't think anyone has come up with a "style guide" for when to
> use Stream returning as opposed to list-returning methods.
>
> What I can say is that I think List is the better fit here, because:
> - the result is not large
> - the result may well be stored somewhere (method should guarantee
> result is immutable)
> - a List is simpler conceptually than Stream as a result type (eg.
> serial vs parallel)
>
> Personally, I only tend to return Stream if I the particular method is
> returning a very large data set.
>
There are several discussion points around this aspect of API design. 
One of the most important questions to ask is whether a stream or 
collection is more useful to the caller. For the API under discussion 
then we have several examples in the JDK that process the class path or 
module path. One example involves mapping the elements of the class path 
to file URLs and into an array to create a URLClassLoader. Another maps 
the elements to Path objects and into an array to create a ModuleFinder. 
Another maps the elements to Path objects and performs an action on each 
element. Stuart brings up the empty path case which, depending on 
context, may need to be filtered. The examples so far iterate over the 
elements once and an intermediate/cached collection isn't needed. On the 
other hand, I think Roger's main use-case is representing the value of 
the java.class.path property as a List<Path> which will may involve 
caching an unmodifiable list.

-Alan



More information about the core-libs-dev mailing list