Фильтр единиц измерения по количеству
Мы используем отличную систему единиц измерения для динамического управления единицами измерения. У меня есть требование отфильтровать список единиц по количеству. Например, отобразить всю массу (тонна, кг....). Список приводит к общему списку захвата (который не идеален - я знаю). Общая информация не существует во время выполнения (только во время компиляции). Однако для интерфейса модуля существует реализация для проверки совместимости:
логическое значение 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 не предложит улучшенные обобщенные типы или какой-либо другой способ получения более качественной информации о типах, чем сегодня.