On Tue, 2 Nov 2021 07:31:09 GMT, Stephen Colebourne <scolebou...@openjdk.org> 
wrote:

>> I see what you're saying that an arbitrary `Temporal` could define its own 
>> fields with its own ranges, but I would consider it a design bug if such an 
>> implementation at a whim redefines the value ranges of well-defined 
>> constants such as `ChronoField.NANO_OF_SECOND` or `HOUR_OF_DAY`. I'd expect 
>> such a `Temporal` would have to define its own enumeration of allowed 
>> `TemporalField`s.
>
> That isn't the design model however. The design model for the formatter is a 
> `Map` like view of field to value. Any value may be associated with any field 
> - that is exactly what `Temporal` offers. 
> [`TempralAccessor.getLong()`](https://download.java.net/java/early_access/loom/docs/api/java.base/java/time/temporal/TemporalAccessor.html#getLong(java.time.temporal.TemporalField))
>  is very explicit about this.
> 
> As indicated above, the positive part is that an hour-of-day of 26 can be 
> printed by a user-written `WrappingLocalTime` class. The downside is the 
> inability to make optimizing assumptions as per this code.
> 
> FWIW, I had originally intended to write dedicated private formatters where 
> the pattern and type to be formatted are known, such as `LocalDate` and the 
> ISO pattern.

Ok, I've added a fallback to instantiate and use an instance of 
`FractionPrinterParser` when the value is outside of the range. This has a 
negligible negative effect on performance in the provided micro-benchmarks. 
Does this resolve your concerns?

I think dedicated private formatters is still a good idea, but I wanted to take 
a stab (like this) at improving common patterns in the shared code first.

-------------

PR: https://git.openjdk.java.net/jdk/pull/6188

Reply via email to