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