Draft Spec for Second Preview of String Templates (JEP 459)
Gavin Bierman
gavin.bierman at oracle.com
Fri Oct 13 09:13:22 UTC 2023
Hi Tagir,
Apologies for not replying sooner. Yes, this is an excellent suggestion - improving the precision of typing template expressions is a very welcome change :-)
I have updated the spec, and the compiler will be updated shortly.
Thanks,
Gavin
> On 10 Oct 2023, at 06:33, Tagir Valeev <amaembo at gmail.com> wrote:
>
> Hello, experts!
>
> Probably it's possible to fix the small thing I wrote before? Namely,
> the type of template expression and its thrown exceptions are
> determined by the template expression class signature (namely, the
> instantiation of R and E generic parameters of Processor) and ignoring
> the actual signature of the process() method, which may have covariant
> return type and thrown exception type declared. This looks out of sync
> with the rest of Java. Example:
>
> public final class TemplateTest {
> interface AnyProcessor extends StringTemplate.Processor<Object,
> Throwable> {}
>
> static class IntProcessor implements AnyProcessor {
> @Override
> public Integer process(StringTemplate stringTemplate) {
> return 123;
> }
> }
>
> public static void main(String[] args) {
> // error: incompatible types: java.lang.Object cannot be
> converted to java.lang.Integer
> Integer xyz = new IntProcessor()."hello";
> // error: unreported exception java.lang.Throwable; must be
> caught or declared to be thrown
> Object xyz2 = new IntProcessor()."hello";
> }
> }
>
> I'm not sure whether current behavior is explicitly stated in the spec
> draft, but the reference implementation behaves this way. I would
> expect this code to be compilable.
>
> Note that we have a similar implicit method invocation construct,
> try-with-resources, and it respects the actual signature of the
> close() method (namely, declared exceptions). I think that similarly
> we should respect the actual method signature here.
>
> With best regards,
> Tagir Valeev.
>
> On Mon, Oct 9, 2023 at 4:46 PM Gavin Bierman <gavin.bierman at oracle.com> wrote:
>>
>> Dear experts:
>>
>> The first draft of a spec covering JEP 459 (String Templates (Second Preview)) is now available at:
>>
>> https://cr.openjdk.java.net/~gbierman/jep459/latest
>>
>> Feel free to contact me directly or on this list with any comments.
>>
>> Thanks
>> Gavin
>>
>>
>>> On 5 Oct 2023, at 13:20, Mark Reinhold <mark.reinhold at oracle.com> wrote:
>>>
>>> https://openjdk.org/jeps/459
>>>
>>> Summary: Enhance the Java programming language with string
>>> templates. String templates complement Java's existing string literals
>>> and text blocks by coupling literal text with embedded expressions and
>>> template processors to produce specialized results. This is a preview
>>> language feature and API.
>>>
>>> - Mark
More information about the amber-spec-experts
mailing list