17935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/*
27935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert *******************************************************************************
3f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert * Copyright (C) 2004-2015, Google Inc, International Business Machines        *
47935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * Corporation and others. All Rights Reserved.                                *
57935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert *******************************************************************************
67935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */
77935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpackage com.ibm.icu.util;
87935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
97935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.io.Externalizable;
107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.io.IOException;
117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.io.ObjectInput;
127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.io.ObjectOutput;
137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.io.ObjectStreamException;
147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.io.Serializable;
157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.Collections;
167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.Enumeration;
177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.HashMap;
187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.HashSet;
197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.Map;
207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.MissingResourceException;
217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport java.util.Set;
227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.impl.ICUResourceBundle;
24f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubertimport com.ibm.icu.impl.Pair;
257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertimport com.ibm.icu.text.UnicodeSet;
267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert/**
287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * A unit such as length, mass, volume, currency, etc.  A unit is
297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * coupled with a numeric amount to produce a Measure. MeasureUnit objects are immutable.
307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * All subclasses must guarantee that. (However, subclassing is discouraged.)
317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert *
337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * @see com.ibm.icu.util.Measure
347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * @author Alan Liu
357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert * @stable ICU 3.0
367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert */
377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubertpublic class MeasureUnit implements Serializable {
387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    private static final long serialVersionUID = -1839973855554750484L;
397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    // Used to pre-fill the cache. These same constants appear in MeasureFormat too.
417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    private static final String[] unitKeys = new String[]{"units", "unitsShort", "unitsNarrow"};
427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    private static final Map<String, Map<String,MeasureUnit>> cache
447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    = new HashMap<String, Map<String,MeasureUnit>>();
457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @internal
487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @deprecated This API is ICU internal only.
497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     */
507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    @Deprecated
517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    protected final String type;
527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @internal
557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @deprecated This API is ICU internal only.
567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     */
577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    @Deprecated
587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    protected final String subType;
597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @internal
627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @deprecated This API is ICU internal only.
637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     */
647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    @Deprecated
657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    protected MeasureUnit(String type, String subType) {
667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        this.type = type;
677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        this.subType = subType;
687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Get the type, such as "length"
727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     *
73f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     */
757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public String getType() {
767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        return type;
777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Get the subType, such as “foot”.
827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     *
83f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     */
857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public String getSubtype() {
867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        return subType;
877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
92f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * {@inheritDoc}
93f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     *
94f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     */
967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    @Override
977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public int hashCode() {
987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        return 31 * type.hashCode() + subType.hashCode();
997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
1007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
102f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * {@inheritDoc}
103f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     *
104f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
1057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     */
1067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    @Override
1077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public boolean equals(Object rhs) {
1087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        if (rhs == this) {
1097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            return true;
1107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
1117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        if (!(rhs instanceof MeasureUnit)) {
1127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            return false;
1137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
1147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        MeasureUnit c = (MeasureUnit) rhs;
1157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        return type.equals(c.type) && subType.equals(c.subType);
1167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
1177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
119f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * {@inheritDoc}
120f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     *
121f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
1227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     */
1237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    @Override
1247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public String toString() {
1257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        return type + "-" + subType;
1267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
1277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
1297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Get all of the available units' types. Returned set is unmodifiable.
1307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     *
131f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
1327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     */
1337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public synchronized static Set<String> getAvailableTypes() {
1347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        return Collections.unmodifiableSet(cache.keySet());
1357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
1367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
1387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * For the given type, return the available units.
1397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @param type the type
1407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @return the available units for type. Returned set is unmodifiable.
141f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
1427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     */
1437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public synchronized static Set<MeasureUnit> getAvailable(String type) {
1447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        Map<String, MeasureUnit> units = cache.get(type);
1457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        // Train users not to modify returned set from the start giving us more
1467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        // flexibility for implementation.
1477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        return units == null ? Collections.<MeasureUnit>emptySet()
1487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                : Collections.unmodifiableSet(new HashSet<MeasureUnit>(units.values()));
1497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
1507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
1527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Get all of the available units. Returned set is unmodifiable.
1537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     *
154f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
1557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     */
1567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public synchronized static Set<MeasureUnit> getAvailable() {
1577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        Set<MeasureUnit> result = new HashSet<MeasureUnit>();
1587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        for (String type : new HashSet<String>(MeasureUnit.getAvailableTypes())) {
1597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            for (MeasureUnit unit : MeasureUnit.getAvailable(type)) {
1607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                result.add(unit);
1617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
1627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
1637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        // Train users not to modify returned set from the start giving us more
1647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        // flexibility for implementation.
1657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        return Collections.unmodifiableSet(result);
1667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
1677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
1697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Create a MeasureUnit instance (creates a singleton instance).
1707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * <p>
1717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Normally this method should not be used, since there will be no formatting data
1727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * available for it, and it may not be returned by getAvailable().
1737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * However, for special purposes (such as CLDR tooling), it is available.
1747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     *
1757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @internal
1767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @deprecated This API is ICU internal only.
1777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     */
1787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    @Deprecated
1797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static MeasureUnit internalGetInstance(String type, String subType) {
1807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        if (type == null || subType == null) {
1817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            throw new NullPointerException("Type and subType must be non-null");
1827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
1837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        if (!"currency".equals(type)) {
184bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert            if (!ASCII.containsAll(type) || !ASCII_HYPHEN_DIGITS.containsAll(subType)) {
1857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                throw new IllegalArgumentException("The type or subType are invalid.");
1867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
1877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
1887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        Factory factory;
1897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        if ("currency".equals(type)) {
1907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            factory = CURRENCY_FACTORY;
1917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } else if ("duration".equals(type)) {
1927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            factory = TIMEUNIT_FACTORY;
1937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } else {
1947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            factory = UNIT_FACTORY;
1957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
1967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        return MeasureUnit.addUnit(type, subType, factory);
1977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
198f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert
199f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert    /**
200f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * For ICU use only.
201f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @internal
202f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @deprecated This API is ICU internal only.
203f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
204f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert    @Deprecated
205f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert    public static MeasureUnit resolveUnitPerUnit(MeasureUnit unit, MeasureUnit perUnit) {
206f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert        return unitPerUnitToSingleUnit.get(Pair.of(unit, perUnit));
207f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert    }
2087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    static final UnicodeSet ASCII = new UnicodeSet('a', 'z').freeze();
210bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    static final UnicodeSet ASCII_HYPHEN_DIGITS = new UnicodeSet('-', '-', '0', '9', 'a', 'z').freeze();
2117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
2137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @internal
2147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @deprecated This API is ICU internal only.
2157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     */
2167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    @Deprecated
2177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    protected interface Factory {
2187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        /**
2197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert         * @internal
2207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert         * @deprecated This API is ICU internal only.
2217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert         */
2227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        @Deprecated
2237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        MeasureUnit create(String type, String subType);
2247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
2257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    private static Factory UNIT_FACTORY = new Factory() {
2277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public MeasureUnit create(String type, String subType) {
2287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            return new MeasureUnit(type, subType);
2297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
2307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    };
2317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    static Factory CURRENCY_FACTORY = new Factory() {
2337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public MeasureUnit create(String unusedType, String subType) {
2347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            return new Currency(subType);
2357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
2367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    };
2377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    static Factory TIMEUNIT_FACTORY = new Factory() {
2397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public MeasureUnit create(String type, String subType) {
2407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert           return new TimeUnit(type, subType);
2417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
2427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    };
2437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    static {
2457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        // load all of the units for English, since we know that that is a superset.
2467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        /**
2477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert         *     units{
2487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert         *            duration{
2497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert         *                day{
2507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert         *                    one{"{0} ден"}
2517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert         *                    other{"{0} дена"}
2527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert         *                }
2537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert         */
2547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        ICUResourceBundle resource = (ICUResourceBundle)UResourceBundle.getBundleInstance(ICUResourceBundle.ICU_BASE_NAME, "en");
2557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        for (String key : unitKeys) {
2567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            try {
2577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                ICUResourceBundle unitsTypeRes = resource.getWithFallback(key);
2587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                int size = unitsTypeRes.getSize();
2597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                for ( int index = 0; index < size; ++index) {
2607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    UResourceBundle unitsRes = unitsTypeRes.get(index);
2617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    String type = unitsRes.getKey();
2627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    if (type.equals("compound")) {
2637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                        continue; // special type, does not have any unit plurals
2647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    }
2657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    int unitsSize = unitsRes.getSize();
2667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    for ( int index2 = 0; index2 < unitsSize; ++index2) {
2677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                        ICUResourceBundle unitNameRes = (ICUResourceBundle)unitsRes.get(index2);
2687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                        if (unitNameRes.get("other") != null) {
2697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                            internalGetInstance(type, unitNameRes.getKey());
2707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                        }
2717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    }
2727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                }
2737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            } catch ( MissingResourceException e ) {
2747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                continue;
2757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
2767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
2777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        // preallocate currencies
2787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        try {
2797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            UResourceBundle bundle = UResourceBundle.getBundleInstance(
2807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    ICUResourceBundle.ICU_BASE_NAME,
2817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    "currencyNumericCodes",
2827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                    ICUResourceBundle.ICU_DATA_CLASS_LOADER);
2837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            UResourceBundle codeMap = bundle.get("codeMap");
2847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            for (Enumeration<String> it = codeMap.getKeys(); it.hasMoreElements();) {
2857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                MeasureUnit.internalGetInstance("currency", it.nextElement());
2867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
2877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } catch (MissingResourceException e) {
2887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            // fall through
2897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
2907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
2917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
2927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    // Must only be called at static initialization, or inside synchronized block.
2937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
2947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @internal
2957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @deprecated This API is ICU internal only.
2967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     */
2977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    @Deprecated
2987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    protected synchronized static MeasureUnit addUnit(String type, String unitName, Factory factory) {
2997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        Map<String, MeasureUnit> tmp = cache.get(type);
3007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        if (tmp == null) {
3017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            cache.put(type, tmp = new HashMap<String, MeasureUnit>());
3027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        } else {
3037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            // "intern" the type by setting to first item's type.
3047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            type = tmp.entrySet().iterator().next().getValue().type;
3057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
3067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        MeasureUnit unit = tmp.get(unitName);
3077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        if (unit == null) {
3087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            tmp.put(unitName, unit = factory.create(type, unitName));
3097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
3107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        return unit;
3117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
3127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /*
3157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Useful constants. Not necessarily complete: see {@link #getAvailable()}.
3167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     */
3177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// All code between the "Start generated MeasureUnit constants" comment and
3197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// the "End generated MeasureUnit constants" comment is auto generated code
3207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// and must not be edited manually. For instructions on how to correctly
3217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert// update this code, refer to:
322f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert// http://site.icu-project.org/design/formatting/measureformat/updating-measure-unit
3237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert//
3247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    // Start generated MeasureUnit constants
3257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
3277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of acceleration: g-force
328f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
329f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
3307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit G_FORCE = MeasureUnit.internalGetInstance("acceleration", "g-force");
3317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
3337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of acceleration: meter-per-second-squared
334bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
335f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
3367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit METER_PER_SECOND_SQUARED = MeasureUnit.internalGetInstance("acceleration", "meter-per-second-squared");
3377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
3397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of angle: arc-minute
340f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
341f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
3427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit ARC_MINUTE = MeasureUnit.internalGetInstance("angle", "arc-minute");
3437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
3457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of angle: arc-second
346f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
347f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
3487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit ARC_SECOND = MeasureUnit.internalGetInstance("angle", "arc-second");
3497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
3517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of angle: degree
352f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
353f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
3547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit DEGREE = MeasureUnit.internalGetInstance("angle", "degree");
3557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
3577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of angle: radian
358bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
359f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
3607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit RADIAN = MeasureUnit.internalGetInstance("angle", "radian");
3617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
363bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Constant for unit of angle: revolution
364bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @draft ICU 56
365bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @provisional This API might change or be removed in a future release.
366bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
367bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final MeasureUnit REVOLUTION_ANGLE = MeasureUnit.internalGetInstance("angle", "revolution");
368bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
369bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
3707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of area: acre
371f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
372f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
3737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit ACRE = MeasureUnit.internalGetInstance("area", "acre");
3747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
3767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of area: hectare
377f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
378f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
3797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit HECTARE = MeasureUnit.internalGetInstance("area", "hectare");
3807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
3827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of area: square-centimeter
383bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
384f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
3857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit SQUARE_CENTIMETER = MeasureUnit.internalGetInstance("area", "square-centimeter");
3867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
3887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of area: square-foot
389f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
390f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
3917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit SQUARE_FOOT = MeasureUnit.internalGetInstance("area", "square-foot");
3927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
3947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of area: square-inch
395bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
396f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
3977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit SQUARE_INCH = MeasureUnit.internalGetInstance("area", "square-inch");
3987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
3997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
4007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of area: square-kilometer
401f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
402f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
4037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit SQUARE_KILOMETER = MeasureUnit.internalGetInstance("area", "square-kilometer");
4047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
4057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
4067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of area: square-meter
407f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
408f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
4097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit SQUARE_METER = MeasureUnit.internalGetInstance("area", "square-meter");
4107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
4117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
4127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of area: square-mile
413f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
414f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
4157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit SQUARE_MILE = MeasureUnit.internalGetInstance("area", "square-mile");
4167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
4177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
4187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of area: square-yard
419bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
420f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
4217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit SQUARE_YARD = MeasureUnit.internalGetInstance("area", "square-yard");
4227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
4237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
424bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Constant for unit of consumption: liter-per-100kilometers
425bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @draft ICU 56
4267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
427f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
428bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final MeasureUnit LITER_PER_100KILOMETERS = MeasureUnit.internalGetInstance("consumption", "liter-per-100kilometers");
429bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
430bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
431bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Constant for unit of consumption: liter-per-kilometer
432bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
433bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
4347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit LITER_PER_KILOMETER = MeasureUnit.internalGetInstance("consumption", "liter-per-kilometer");
4357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
4367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
4377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of consumption: mile-per-gallon
438bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
439f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
4407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit MILE_PER_GALLON = MeasureUnit.internalGetInstance("consumption", "mile-per-gallon");
4417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
4427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
4437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of digital: bit
444bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
445f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
4467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit BIT = MeasureUnit.internalGetInstance("digital", "bit");
4477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
4487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
4497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of digital: byte
450bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
451f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
4527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit BYTE = MeasureUnit.internalGetInstance("digital", "byte");
4537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
4547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
4557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of digital: gigabit
456bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
457f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
4587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit GIGABIT = MeasureUnit.internalGetInstance("digital", "gigabit");
4597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
4607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
4617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of digital: gigabyte
462bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
463f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
4647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit GIGABYTE = MeasureUnit.internalGetInstance("digital", "gigabyte");
4657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
4667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
4677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of digital: kilobit
468bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
469f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
4707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit KILOBIT = MeasureUnit.internalGetInstance("digital", "kilobit");
4717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
4727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
4737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of digital: kilobyte
474bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
475f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
4767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit KILOBYTE = MeasureUnit.internalGetInstance("digital", "kilobyte");
4777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
4787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
4797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of digital: megabit
480bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
481f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
4827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit MEGABIT = MeasureUnit.internalGetInstance("digital", "megabit");
4837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
4847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
4857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of digital: megabyte
486bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
487f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
4887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit MEGABYTE = MeasureUnit.internalGetInstance("digital", "megabyte");
4897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
4907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
4917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of digital: terabit
492bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
493f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
4947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit TERABIT = MeasureUnit.internalGetInstance("digital", "terabit");
4957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
4967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
4977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of digital: terabyte
498bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
499f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
5007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit TERABYTE = MeasureUnit.internalGetInstance("digital", "terabyte");
5017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
5027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
503bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Constant for unit of duration: century
504bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @draft ICU 56
505bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @provisional This API might change or be removed in a future release.
506bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
507bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final MeasureUnit CENTURY = MeasureUnit.internalGetInstance("duration", "century");
508bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
509bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
5107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of duration: day
5117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @stable ICU 4.0
512f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
5137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final TimeUnit DAY = (TimeUnit) MeasureUnit.internalGetInstance("duration", "day");
5147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
5157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
5167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of duration: hour
5177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @stable ICU 4.0
518f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
5197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final TimeUnit HOUR = (TimeUnit) MeasureUnit.internalGetInstance("duration", "hour");
5207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
5217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
5227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of duration: microsecond
523bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
524f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
5257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit MICROSECOND = MeasureUnit.internalGetInstance("duration", "microsecond");
5267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
5277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
5287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of duration: millisecond
529f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
530f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
5317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit MILLISECOND = MeasureUnit.internalGetInstance("duration", "millisecond");
5327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
5337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
5347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of duration: minute
5357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @stable ICU 4.0
536f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
5377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final TimeUnit MINUTE = (TimeUnit) MeasureUnit.internalGetInstance("duration", "minute");
5387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
5397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
5407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of duration: month
5417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @stable ICU 4.0
542f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
5437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final TimeUnit MONTH = (TimeUnit) MeasureUnit.internalGetInstance("duration", "month");
5447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
5457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
5467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of duration: nanosecond
547bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
548f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
5497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit NANOSECOND = MeasureUnit.internalGetInstance("duration", "nanosecond");
5507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
5517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
5527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of duration: second
5537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @stable ICU 4.0
554f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
5557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final TimeUnit SECOND = (TimeUnit) MeasureUnit.internalGetInstance("duration", "second");
5567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
5577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
5587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of duration: week
5597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @stable ICU 4.0
560f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
5617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final TimeUnit WEEK = (TimeUnit) MeasureUnit.internalGetInstance("duration", "week");
5627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
5637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
5647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of duration: year
5657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @stable ICU 4.0
566f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
5677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final TimeUnit YEAR = (TimeUnit) MeasureUnit.internalGetInstance("duration", "year");
5687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
5697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
5707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of electric: ampere
571bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
572f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
5737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit AMPERE = MeasureUnit.internalGetInstance("electric", "ampere");
5747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
5757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
5767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of electric: milliampere
577bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
578f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
5797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit MILLIAMPERE = MeasureUnit.internalGetInstance("electric", "milliampere");
5807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
5817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
5827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of electric: ohm
583bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
584f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
5857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit OHM = MeasureUnit.internalGetInstance("electric", "ohm");
5867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
5877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
5887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of electric: volt
589bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
590f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
5917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit VOLT = MeasureUnit.internalGetInstance("electric", "volt");
5927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
5937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
5947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of energy: calorie
595bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
596f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
5977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit CALORIE = MeasureUnit.internalGetInstance("energy", "calorie");
5987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
5997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
6007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of energy: foodcalorie
601bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
602f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
6037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit FOODCALORIE = MeasureUnit.internalGetInstance("energy", "foodcalorie");
6047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
6057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
6067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of energy: joule
607bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
608f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
6097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit JOULE = MeasureUnit.internalGetInstance("energy", "joule");
6107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
6117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
6127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of energy: kilocalorie
613bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
614f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
6157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit KILOCALORIE = MeasureUnit.internalGetInstance("energy", "kilocalorie");
6167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
6177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
6187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of energy: kilojoule
619bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
620f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
6217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit KILOJOULE = MeasureUnit.internalGetInstance("energy", "kilojoule");
6227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
6237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
6247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of energy: kilowatt-hour
625bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
626f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
6277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit KILOWATT_HOUR = MeasureUnit.internalGetInstance("energy", "kilowatt-hour");
6287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
6297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
6307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of frequency: gigahertz
631bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
632f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
6337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit GIGAHERTZ = MeasureUnit.internalGetInstance("frequency", "gigahertz");
6347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
6357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
6367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of frequency: hertz
637bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
638f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
6397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit HERTZ = MeasureUnit.internalGetInstance("frequency", "hertz");
6407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
6417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
6427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of frequency: kilohertz
643bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
644f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
6457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit KILOHERTZ = MeasureUnit.internalGetInstance("frequency", "kilohertz");
6467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
6477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
6487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of frequency: megahertz
649bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
650f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
6517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit MEGAHERTZ = MeasureUnit.internalGetInstance("frequency", "megahertz");
6527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
6537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
6547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of length: astronomical-unit
655bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
656f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
6577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit ASTRONOMICAL_UNIT = MeasureUnit.internalGetInstance("length", "astronomical-unit");
6587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
6597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
6607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of length: centimeter
661f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
662f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
6637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit CENTIMETER = MeasureUnit.internalGetInstance("length", "centimeter");
6647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
6657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
6667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of length: decimeter
667bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
668f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
6697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit DECIMETER = MeasureUnit.internalGetInstance("length", "decimeter");
6707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
6717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
6727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of length: fathom
673bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
674f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
6757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit FATHOM = MeasureUnit.internalGetInstance("length", "fathom");
6767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
6777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
6787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of length: foot
679f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
680f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
6817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit FOOT = MeasureUnit.internalGetInstance("length", "foot");
6827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
6837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
6847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of length: furlong
685bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
686f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
6877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit FURLONG = MeasureUnit.internalGetInstance("length", "furlong");
6887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
6897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
6907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of length: inch
691f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
692f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
6937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit INCH = MeasureUnit.internalGetInstance("length", "inch");
6947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
6957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
6967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of length: kilometer
697f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
698f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
6997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit KILOMETER = MeasureUnit.internalGetInstance("length", "kilometer");
7007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
7017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
7027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of length: light-year
703f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
704f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
7057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit LIGHT_YEAR = MeasureUnit.internalGetInstance("length", "light-year");
7067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
7077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
7087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of length: meter
709f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
710f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
7117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit METER = MeasureUnit.internalGetInstance("length", "meter");
7127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
7137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
7147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of length: micrometer
715bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
716f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
7177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit MICROMETER = MeasureUnit.internalGetInstance("length", "micrometer");
7187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
7197935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
7207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of length: mile
721f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
722f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
7237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit MILE = MeasureUnit.internalGetInstance("length", "mile");
7247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
7257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
726bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Constant for unit of length: mile-scandinavian
727bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @draft ICU 56
728bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @provisional This API might change or be removed in a future release.
729bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
730bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final MeasureUnit MILE_SCANDINAVIAN = MeasureUnit.internalGetInstance("length", "mile-scandinavian");
731bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
732bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
7337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of length: millimeter
734f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
735f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
7367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit MILLIMETER = MeasureUnit.internalGetInstance("length", "millimeter");
7377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
7387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
7397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of length: nanometer
740bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
741f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
7427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit NANOMETER = MeasureUnit.internalGetInstance("length", "nanometer");
7437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
7447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
7457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of length: nautical-mile
746bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
747f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
7487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit NAUTICAL_MILE = MeasureUnit.internalGetInstance("length", "nautical-mile");
7497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
7507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
7517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of length: parsec
752bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
753f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
7547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit PARSEC = MeasureUnit.internalGetInstance("length", "parsec");
7557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
7567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
7577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of length: picometer
758f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
759f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
7607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit PICOMETER = MeasureUnit.internalGetInstance("length", "picometer");
7617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
7627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
7637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of length: yard
764f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
765f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
7667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit YARD = MeasureUnit.internalGetInstance("length", "yard");
7677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
7687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
7697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of light: lux
770bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
771f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
7727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit LUX = MeasureUnit.internalGetInstance("light", "lux");
7737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
7747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
7757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of mass: carat
776bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
777f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
7787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit CARAT = MeasureUnit.internalGetInstance("mass", "carat");
7797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
7807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
7817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of mass: gram
782f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
783f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
7847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit GRAM = MeasureUnit.internalGetInstance("mass", "gram");
7857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
7867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
7877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of mass: kilogram
788f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
789f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
7907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit KILOGRAM = MeasureUnit.internalGetInstance("mass", "kilogram");
7917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
7927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
7937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of mass: metric-ton
794bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
795f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
7967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit METRIC_TON = MeasureUnit.internalGetInstance("mass", "metric-ton");
7977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
7987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
7997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of mass: microgram
800bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
801f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
8027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit MICROGRAM = MeasureUnit.internalGetInstance("mass", "microgram");
8037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
8047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
8057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of mass: milligram
806bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
807f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
8087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit MILLIGRAM = MeasureUnit.internalGetInstance("mass", "milligram");
8097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
8107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
8117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of mass: ounce
812f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
813f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
8147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit OUNCE = MeasureUnit.internalGetInstance("mass", "ounce");
8157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
8167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
8177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of mass: ounce-troy
818bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
819f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
8207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit OUNCE_TROY = MeasureUnit.internalGetInstance("mass", "ounce-troy");
8217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
8227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
8237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of mass: pound
824f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
825f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
8267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit POUND = MeasureUnit.internalGetInstance("mass", "pound");
8277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
8287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
8297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of mass: stone
830bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
831f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
8327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit STONE = MeasureUnit.internalGetInstance("mass", "stone");
8337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
8347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
8357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of mass: ton
836bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
837f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
8387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit TON = MeasureUnit.internalGetInstance("mass", "ton");
8397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
8407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
8417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of power: gigawatt
842bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
843f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
8447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit GIGAWATT = MeasureUnit.internalGetInstance("power", "gigawatt");
8457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
8467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
8477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of power: horsepower
848f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
849f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
8507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit HORSEPOWER = MeasureUnit.internalGetInstance("power", "horsepower");
8517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
8527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
8537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of power: kilowatt
854f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
855f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
8567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit KILOWATT = MeasureUnit.internalGetInstance("power", "kilowatt");
8577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
8587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
8597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of power: megawatt
860bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
861f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
8627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit MEGAWATT = MeasureUnit.internalGetInstance("power", "megawatt");
8637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
8647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
8657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of power: milliwatt
866bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
867f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
8687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit MILLIWATT = MeasureUnit.internalGetInstance("power", "milliwatt");
8697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
8707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
8717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of power: watt
872f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
873f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
8747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit WATT = MeasureUnit.internalGetInstance("power", "watt");
8757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
8767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
8777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of pressure: hectopascal
878f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
879f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
8807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit HECTOPASCAL = MeasureUnit.internalGetInstance("pressure", "hectopascal");
8817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
8827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
8837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of pressure: inch-hg
884f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
885f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
8867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit INCH_HG = MeasureUnit.internalGetInstance("pressure", "inch-hg");
8877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
8887935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
8897935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of pressure: millibar
890f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
891f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
8927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit MILLIBAR = MeasureUnit.internalGetInstance("pressure", "millibar");
8937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
8947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
8957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of pressure: millimeter-of-mercury
896bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
897f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
8987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit MILLIMETER_OF_MERCURY = MeasureUnit.internalGetInstance("pressure", "millimeter-of-mercury");
8997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
9007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
9017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of pressure: pound-per-square-inch
902bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
903f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
9047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit POUND_PER_SQUARE_INCH = MeasureUnit.internalGetInstance("pressure", "pound-per-square-inch");
9057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
9067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
9077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of proportion: karat
908bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
909f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
9107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit KARAT = MeasureUnit.internalGetInstance("proportion", "karat");
9117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
9127935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
9137935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of speed: kilometer-per-hour
914f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
915f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
9167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit KILOMETER_PER_HOUR = MeasureUnit.internalGetInstance("speed", "kilometer-per-hour");
9177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
9187935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
919bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Constant for unit of speed: knot
920bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @draft ICU 56
921bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @provisional This API might change or be removed in a future release.
922bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
923bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final MeasureUnit KNOT = MeasureUnit.internalGetInstance("speed", "knot");
924bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
925bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
9267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of speed: meter-per-second
927f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
928f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
9297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit METER_PER_SECOND = MeasureUnit.internalGetInstance("speed", "meter-per-second");
9307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
9317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
9327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of speed: mile-per-hour
933f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
934f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
9357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit MILE_PER_HOUR = MeasureUnit.internalGetInstance("speed", "mile-per-hour");
9367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
9377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
9387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of temperature: celsius
939f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
940f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
9417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit CELSIUS = MeasureUnit.internalGetInstance("temperature", "celsius");
9427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
9437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
9447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of temperature: fahrenheit
945f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
946f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
9477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit FAHRENHEIT = MeasureUnit.internalGetInstance("temperature", "fahrenheit");
9487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
9497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
950bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Constant for unit of temperature: generic
951bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @draft ICU 56
9527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
953f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
954bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final MeasureUnit GENERIC_TEMPERATURE = MeasureUnit.internalGetInstance("temperature", "generic");
955bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
956bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
957bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Constant for unit of temperature: kelvin
958bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
959bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
9607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit KELVIN = MeasureUnit.internalGetInstance("temperature", "kelvin");
9617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
9627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
9637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of volume: acre-foot
964bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
965f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
9667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit ACRE_FOOT = MeasureUnit.internalGetInstance("volume", "acre-foot");
9677935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
9687935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
9697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of volume: bushel
970bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
971f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
9727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit BUSHEL = MeasureUnit.internalGetInstance("volume", "bushel");
9737935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
9747935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
9757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of volume: centiliter
976bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
977f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
9787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit CENTILITER = MeasureUnit.internalGetInstance("volume", "centiliter");
9797935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
9807935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
9817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of volume: cubic-centimeter
982bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
983f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
9847935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit CUBIC_CENTIMETER = MeasureUnit.internalGetInstance("volume", "cubic-centimeter");
9857935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
9867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
9877935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of volume: cubic-foot
988bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
989f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
9907935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit CUBIC_FOOT = MeasureUnit.internalGetInstance("volume", "cubic-foot");
9917935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
9927935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
9937935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of volume: cubic-inch
994bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
995f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
9967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit CUBIC_INCH = MeasureUnit.internalGetInstance("volume", "cubic-inch");
9977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
9987935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
9997935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of volume: cubic-kilometer
1000f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
1001f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
10027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit CUBIC_KILOMETER = MeasureUnit.internalGetInstance("volume", "cubic-kilometer");
10037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
10047935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
10057935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of volume: cubic-meter
1006bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
1007f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
10087935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit CUBIC_METER = MeasureUnit.internalGetInstance("volume", "cubic-meter");
10097935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
10107935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
10117935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of volume: cubic-mile
1012f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
1013f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
10147935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit CUBIC_MILE = MeasureUnit.internalGetInstance("volume", "cubic-mile");
10157935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
10167935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
10177935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of volume: cubic-yard
1018bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
1019f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
10207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit CUBIC_YARD = MeasureUnit.internalGetInstance("volume", "cubic-yard");
10217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
10227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
10237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of volume: cup
1024bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
1025f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
10267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit CUP = MeasureUnit.internalGetInstance("volume", "cup");
10277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
10287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
1029bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Constant for unit of volume: cup-metric
1030bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @draft ICU 56
10317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
1032f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
1033bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final MeasureUnit CUP_METRIC = MeasureUnit.internalGetInstance("volume", "cup-metric");
1034bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1035bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
1036bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Constant for unit of volume: deciliter
1037bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
1038bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
10397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit DECILITER = MeasureUnit.internalGetInstance("volume", "deciliter");
10407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
10417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
10427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of volume: fluid-ounce
1043bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
1044f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
10457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit FLUID_OUNCE = MeasureUnit.internalGetInstance("volume", "fluid-ounce");
10467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
10477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
10487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of volume: gallon
1049bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
1050f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
10517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit GALLON = MeasureUnit.internalGetInstance("volume", "gallon");
10527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
10537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
10547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of volume: hectoliter
1055bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
1056f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
10577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit HECTOLITER = MeasureUnit.internalGetInstance("volume", "hectoliter");
10587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
10597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
10607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of volume: liter
1061f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     * @stable ICU 53
1062f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
10637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit LITER = MeasureUnit.internalGetInstance("volume", "liter");
10647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
10657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
10667935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of volume: megaliter
1067bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
1068f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
10697935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit MEGALITER = MeasureUnit.internalGetInstance("volume", "megaliter");
10707935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
10717935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
10727935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of volume: milliliter
1073bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
1074f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
10757935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit MILLILITER = MeasureUnit.internalGetInstance("volume", "milliliter");
10767935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
10777935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
10787935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of volume: pint
1079bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
1080f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
10817935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit PINT = MeasureUnit.internalGetInstance("volume", "pint");
10827935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
10837935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
1084bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Constant for unit of volume: pint-metric
1085bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @draft ICU 56
10867935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * @provisional This API might change or be removed in a future release.
1087f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
1088bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    public static final MeasureUnit PINT_METRIC = MeasureUnit.internalGetInstance("volume", "pint-metric");
1089bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert
1090bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert    /**
1091bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * Constant for unit of volume: quart
1092bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
1093bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     */
10947935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit QUART = MeasureUnit.internalGetInstance("volume", "quart");
10957935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
10967935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
10977935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of volume: tablespoon
1098bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
1099f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
11007935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit TABLESPOON = MeasureUnit.internalGetInstance("volume", "tablespoon");
11017935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
11027935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /**
11037935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert     * Constant for unit of volume: teaspoon
1104bd1cbb618dcaa1ac6ba7c77dece35cb79593a5d7Fredrik Roubert     * @stable ICU 54
1105f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert     */
11067935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    public static final MeasureUnit TEASPOON = MeasureUnit.internalGetInstance("volume", "teaspoon");
11077935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
1108f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert    private static HashMap<Pair<MeasureUnit, MeasureUnit>, MeasureUnit>unitPerUnitToSingleUnit =
1109f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert            new HashMap<Pair<MeasureUnit, MeasureUnit>, MeasureUnit>();
1110f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert
1111f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert    static {
1112f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert        unitPerUnitToSingleUnit.put(Pair.<MeasureUnit, MeasureUnit>of(MeasureUnit.KILOMETER, MeasureUnit.HOUR), MeasureUnit.KILOMETER_PER_HOUR);
1113f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert        unitPerUnitToSingleUnit.put(Pair.<MeasureUnit, MeasureUnit>of(MeasureUnit.MILE, MeasureUnit.GALLON), MeasureUnit.MILE_PER_GALLON);
1114f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert        unitPerUnitToSingleUnit.put(Pair.<MeasureUnit, MeasureUnit>of(MeasureUnit.MILE, MeasureUnit.HOUR), MeasureUnit.MILE_PER_HOUR);
1115f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert        unitPerUnitToSingleUnit.put(Pair.<MeasureUnit, MeasureUnit>of(MeasureUnit.METER, MeasureUnit.SECOND), MeasureUnit.METER_PER_SECOND);
1116f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert        unitPerUnitToSingleUnit.put(Pair.<MeasureUnit, MeasureUnit>of(MeasureUnit.LITER, MeasureUnit.KILOMETER), MeasureUnit.LITER_PER_KILOMETER);
1117f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert        unitPerUnitToSingleUnit.put(Pair.<MeasureUnit, MeasureUnit>of(MeasureUnit.POUND, MeasureUnit.SQUARE_INCH), MeasureUnit.POUND_PER_SQUARE_INCH);
1118f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert    }
1119f716bda031dccdec5e47bb40e758c5901d209729Fredrik Roubert
11207935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    // End generated MeasureUnit constants
11217935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    /* Private */
11227935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
11237935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    private Object writeReplace() throws ObjectStreamException {
11247935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        return new MeasureUnitProxy(type, subType);
11257935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
11267935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
11277935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    static final class MeasureUnitProxy implements Externalizable {
11287935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        private static final long serialVersionUID = -3910681415330989598L;
11297935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
11307935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        private String type;
11317935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        private String subType;
11327935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
11337935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public MeasureUnitProxy(String type, String subType) {
11347935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            this.type = type;
11357935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            this.subType = subType;
11367935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
11377935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
11387935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        // Must have public constructor, to enable Externalizable
11397935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public MeasureUnitProxy() {
11407935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
11417935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
11427935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public void writeExternal(ObjectOutput out) throws IOException {
11437935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            out.writeByte(0); // version
11447935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            out.writeUTF(type);
11457935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            out.writeUTF(subType);
11467935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            out.writeShort(0); // allow for more data.
11477935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
11487935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
11497935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
11507935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            /* byte version = */ in.readByte(); // version
11517935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            type = in.readUTF();
11527935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            subType = in.readUTF();
11537935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            // allow for more data from future version
11547935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            int extra = in.readShort();
11557935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            if (extra > 0) {
11567935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                byte[] extraBytes = new byte[extra];
11577935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert                in.read(extraBytes, 0, extra);
11587935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            }
11597935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
11607935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert
11617935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        private Object readResolve() throws ObjectStreamException {
11627935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert            return MeasureUnit.internalGetInstance(type, subType);
11637935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert        }
11647935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert    }
11657935b1839a081ed19ae0d33029ad3c09632a2caaFredrik Roubert}
1166