/* GENERATED SOURCE. DO NOT MODIFY. */
// © 2017 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html#License

package android.icu.number;

@SuppressWarnings({"unchecked", "deprecation", "all"})
public final class NumberFormatter {

private NumberFormatter() { throw new RuntimeException("Stub!"); }

public static android.icu.number.UnlocalizedNumberFormatter with() { throw new RuntimeException("Stub!"); }

public static android.icu.number.LocalizedNumberFormatter withLocale(java.util.Locale locale) { throw new RuntimeException("Stub!"); }

public static android.icu.number.LocalizedNumberFormatter withLocale(android.icu.util.ULocale locale) { throw new RuntimeException("Stub!"); }
@SuppressWarnings({"unchecked", "deprecation", "all"})
public enum DecimalSeparatorDisplay {
AUTO,
ALWAYS;
}

@SuppressWarnings({"unchecked", "deprecation", "all"})
public enum GroupingStrategy {
OFF,
MIN2,
AUTO,
ON_ALIGNED,
THOUSANDS;
}

@SuppressWarnings({"unchecked", "deprecation", "all"})
public enum SignDisplay {
AUTO,
ALWAYS,
NEVER,
ACCOUNTING,
ACCOUNTING_ALWAYS,
EXCEPT_ZERO,
ACCOUNTING_EXCEPT_ZERO;
}

@SuppressWarnings({"unchecked", "deprecation", "all"})
public enum UnitWidth {
NARROW,
SHORT,
FULL_NAME,
ISO_CODE,
HIDDEN;
}

}

