Как извлечь коэффициент преобразования для любого преобразования подразделения
Вопрос
Когда вы преобразуете между 2 объектами, вы обычно делаете это через Конвертер. Отказ Как я должен узнать, что такое фактор преобразования? Например:
public static final Unit<Length> KILOMETRE = METER.times(1000);
public static final Unit<Length> CENTIMETRE = METRE.divide(100);
Я хотел бы программно получить коэффициент преобразования из интерфейсов преобразователя (т.е. 1000 б /ш километров и измерителя или 1/100 в случае сантиметра до метра)
Я не уверен, как получить эту информацию из интерфейса UnitConverter.
Редактировать1.
protected double getConvFactor(Unit<Length> from, Unit<Length> to) {
double factor = -1;
UnitConverter unitConverter = from.getConverterTo(to);
if (unitConverter instanceof MultiplyConverter) {
MultiplyConverter multiplyConverter = (MultiplyConverter) unitConverter;
factor = multiplyConverter.getFactor();
} else if (unitConverter instanceof AddConverter) {
AddConverter addConverter = (AddConverter) unitConverter;
factor = addConverter.getOffset();
} else if (unitConverter instanceof RationalConverter) {
RationalConverter rationalConverter = (RationalConverter) unitConverter;
double divisor = rationalConverter.getDivisor().doubleValue();
double dividend = rationalConverter.getDividend().doubleValue();
factor = divisor;
}
}
Решение
Редактировать последового кода, размещенного от OP:
UnitConverter
Это абстрактный класс, поэтому нужно извлечь из него, чтобы создать преобразователь для конкретных подразделений, которые вы имеете в виду.
Если вы уже используете класс, полученный из UnitConverter
, вам придется проверить это интерфейс, чтобы увидеть, был ли дизайнер этого класса был достаточно хорош для выставления метода, который возвращает фактор умножения.
Глядя на некоторые классы Jscience, полученные из UnitConverter
:
MultiplyConverter
имеетgetFactor()
Способ, который возвращает фактор, используемый в преобразовании.AddConverter
имеетgetOffset()
Способ, который возвращает смещение, преобразователь добавляет в преобразование.RationalConverter
, Если я правильно понимаю, преобразую, умножая значение, преобразуемое фактор двух чисел - дивиденды и делитель. У класса есть методы,getDividend()
а такжеgetDivisor()
Для возврата дивидендов и дивизора, чтобы вы могли выполнить дивизию, чтобы приблизиться к приближению.
Поэтому я думаю, что ваш код (ниже) в ошибке. Фактор не делитель, как у вас здесь - это фактор.
RationalConverter rationalConverter = (RationalConverter) unitConverter;
double divisor = rationalConverter.getDivisor().doubleValue();
double dividend = rationalConverter.getDividend().doubleValue();
factor = divisor;