code: public static synchronized CurrencyUnit registerCurrency(
              String currencyCode, 
              int numericCurrencyCode,
              int decimalPlaces, 
              boolean force) {
  
          List<String> countryCodes = Collections.emptyList();
          return registerCurrency(currencyCode, numericCurrencyCode, decimalPlaces, countryCodes, force);
      }
docs: Registers a currency allowing it to be used, allowing replacement.
  <p>
  This class only permits known currencies to be returned.
  To achieve this, all currencies have to be registered in advance.
  <p>
  Since this method is public, it is possible to add currencies in
  application code. It is recommended to do this only at startup, however
  it is safe to do so later as the internal implementation is thread-safe.
  <p>
  This method uses a flag to determine whether the registered currency
  must be new, or can replace an existing currency.
  <p>
  The currency code must be three upper-case ASCII letters, based on ISO-4217.
  The numeric code must be from 0 to 999, or -1 if not applicable.
  
  @param currencyCode  the three-letter upper-case currency code, not null
  @param numericCurrencyCode  the numeric currency code, from 0 to 999, -1 if none
  @param decimalPlaces  the number of decimal places that the currency
  normally has, from 0 to 30 (normally 0, 2 or 3), or -1 for a pseudo-currency
  use of ISO-3166 is recommended, not null
  @param force  true to register forcefully, replacing any existing matching currency,
  false to validate that there is no existing matching currency
  @return the new instance, never null
  @throws IllegalArgumentException if the code is already registered and {@code force} is false;
  or if the specified data is invalid