com.ibm.icu.impl.number.MicroPropsGenerator Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of icu4j Show documentation
Show all versions of icu4j Show documentation
International Component for Unicode for Java (ICU4J) is a mature, widely used Java library
providing Unicode and Globalization support
// © 2017 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License
package com.ibm.icu.impl.number;
/**
* This interface is used when all number formatting settings, including the locale, are known, except
* for the quantity itself. The {@link #processQuantity} method performs the final step in the number
* processing pipeline: it uses the quantity to generate a finalized {@link MicroProps}, which can be
* used to render the number to output.
*
*
* In other words, this interface is used for the parts of number processing that are
* quantity-dependent.
*
*
* In order to allow for multiple different objects to all mutate the same MicroProps, a "chain" of
* MicroPropsGenerators are linked together, and each one is responsible for manipulating a certain
* quantity-dependent part of the MicroProps. At the top of the linked list is a base instance of
* {@link MicroProps} with properties that are not quantity-dependent. Each element in the linked list
* calls {@link #processQuantity} on its "parent", then does its work, and then returns the result.
*
*
* A class implementing MicroPropsGenerator looks something like this:
*
*
* class Foo implements MicroPropsGenerator {
* private final MicroPropsGenerator parent;
*
* public Foo(MicroPropsGenerator parent) {
* this.parent = parent;
* }
*
* @Override
* public MicroProps processQuantity(DecimalQuantity quantity) {
* MicroProps micros = this.parent.processQuantity(quantity);
* // Perform manipulations on micros and/or quantity
* return micros;
* }
* }
*
*
* @author sffc
*
*/
public interface MicroPropsGenerator {
/**
* Considers the given {@link DecimalQuantity}, optionally mutates it, and returns a
* {@link MicroProps}.
*
* @param quantity
* The quantity for consideration and optional mutation.
* @return A MicroProps instance resolved for the quantity.
*/
public MicroProps processQuantity(DecimalQuantity quantity);
}