Фильтр единиц измерения по количеству

Мы используем отличную систему единиц измерения для динамического управления единицами измерения. У меня есть требование отфильтровать список единиц по количеству. Например, отобразить всю массу (тонна, кг....). Список приводит к общему списку захвата (который не идеален - я знаю). Общая информация не существует во время выполнения (только во время компиляции). Однако для интерфейса модуля существует реализация для проверки совместимости:

  • логическое значение isCompatible(Unit that);

    @Test
    public void testCompatible_ByUnit(){
        Unit<Mass> kilogram = Units.KILOGRAM;
        Unit<Mass> tonne = NonSI.TONNE;
    
        assertTrue(kilogram.isCompatible(tonne));
    }
    

Есть ли какой-нибудь интерфейс для проверки совместимости по количеству?

Нерабочий пример с количеством масс.

    @Test
    public void testCompatible_FilterByQuantityAndCapture(){
        Unit<?> kilogram = Units.KILOGRAM;
        // wish: interface does not exist
        assertTrue(kilogram.isCompatible(Mass.class));
    }

1 ответ

Решение

Это распространенная проблема языка Java, потому что Java пока не предлагает Reified Generics.

Я не знаю, что эта функция была включена в Java SE 9, поэтому мы, вероятно, не увидим ее до Java 10 или более поздней версии.

<Q extends Quantity<Q>> Unit<Q> getUnit(Class<Q> quantityType);

возвращает стандартный (или системный) модуль для данного Quantity учебный класс. И хотя Dimension это больше "зонтик" для количеств, вы также можете получить список всех единиц в определенном измерении.

Set<? extends Unit<?>> getUnits(Dimension dimension);

В будущей версии API/SPI SystemOfUnits может также предложить что-то подобное для Quantity класс, но вполне возможно, что такого рода дополнительный метод не будет иметь особого смысла, пока базовая платформа Java не предложит улучшенные обобщенные типы или какой-либо другой способ получения более качественной информации о типах, чем сегодня.

Другие вопросы по тегам