В конце концов я выбрал следующее решение.
public class UnitLocale {
public static UnitLocale Imperial = new UnitLocale();
public static UnitLocale Metric = new UnitLocale();
public static UnitLocale getDefault() {
return getFrom(Locale.getDefault());
}
public static UnitLocale getFrom(Locale locale) {
String countryCode = locale.getCountry();
if ("US".equals(countryCode)) return Imperial; // USA
if ("LR".equals(countryCode)) return Imperial; // Liberia
if ("MM".equals(countryCode)) return Imperial; // Myanmar
return Metric;
}
}
Используйте его, например, следующим образом.
if (UnitLocale.getDefault() == UnitLocale.Imperial) convertToimperial();
Если методы преобразования также необходимы, их предпочтительно добавить вподклассы UnitLocale.Мне нужно было только обнаружить , чтобы использовать имперские единицы и отправить его на сервер.
Использование int
s над объектами java значительно снижает производительность и затрудняет чтение кода.Сравнение двух ссылок в Java сопоставимо по скорости с сопоставлением двух ints
.Кроме того, использование объектов позволяет нам добавлять методы к классу или подклассам UnitLocale
, таким как, convertToMetric и т. Д.
Вместо этого вы также можете использовать enum, если хотите.