Как извлечь коэффициент преобразования для любого преобразования подразделения

StackOverflow https://stackoverflow.com/questions/4244277

  •  27-09-2019
  •  | 
  •  

Вопрос

Когда вы преобразуете между 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;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top