A suggestion to improve Text Blocks
Tagir Valeev
amaembo at gmail.com
Fri Jan 17 02:59:19 UTC 2020
+1. Even good old """...""".split("\n") will do the thing.
пт, 17 янв. 2020 г., 9:50 Brian Goetz <brian.goetz at oracle.com>:
> This behavior is already available through the lines() method on
> String. You can do:
>
> String items = """
> Apple
> Orange
> Banana""";
>
> List<String> itemList = items.lines().collect(toList());
> or
> String[] itemArray = items.lines().toArray(String[]::new);
>
> Given that the functionality is readily available in an ordinary library
> method, introducing magic ad-hoc conversions in the language (which has
> probably 100-1000x the cost of a library method) seems ill-advised; they
> add lots of complexity and irregularity for little benefit. (Magic
> conversions are not easily discoverable; they don't always cover the set
> of conversions you want and can't be extended, which often leads to
> complaints of "please also support conversion to <my favorite
> collection>; etc.) Further, a magic way of slicing text blocks wouldn't
> apply to strings produced in other ways; on the other hand, an ordinary,
> well-specified method like String::lines can work on any string,
> regardless of its provenance.
>
> I think what you really want, and are trying to get there indirectly, is
> _collection literals_. Which is a useful, and far^3 more generally
> applicable feature, which we might be able to justify some day. In the
> meantime, you can use general-purpose methods like List::of in its place:
>
> List<String> fruits = List.of("Apple",
> "Orange",
> "Banama");
>
> which is only a few more characters than your example, but with less magic.
>
>
>
> On 1/16/2020 6:26 PM, P Holder wrote:
> > I would like to see the compiler be able to do a little more work
> > while compiling Text Blocks, and to be able to handle these cases
> > intelligently by treating each line (where it would have emitted a
> > newline) as a separate element.
> >
> > String[] itemsInArray = """
> > Apple
> > Orange
> > Banana
> > Kiwi
> > """;
> > which would result in itemsInArray [4], where itemsInArray[0] =
> > "Apple" and itemsInArray[3] = "Kiwi"
> >
> > List<String> itemsInArray = """
> > Apple
> > Orange
> > Banana
> > Kiwi
> > """;
> > which would result in an unmodifiable List<String> with entries like
> > "Apple", "Orange", etc.
>
>
More information about the amber-dev
mailing list