2017-07-07 32 views
0

我們正在使用偉大的unit-of-measurement框架動態管理單位。我有要求按數量過濾單位列表。例如。顯示所有質量(噸,公斤....)。該列表產生一個通用的捕獲列表(這是不理想的 - 我知道)。通用信息在運行時不存在(僅在編譯時)。然而,對於unit接口的實現存在檢查兼容性存在:計量單位數量過濾器

  • 布爾相適應(即單位);

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

是否有任何接口由quantity檢查兼容性?

非工作示例,數量爲Mass

@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平臺提供物化前泛型或其他更好類型信息的方式,而不是它的做法。

+0

謝謝 - 數量的默認(或系統)單位的解決方法正在工作。 – itstata

+0

我正在嘗試getUnits()方法,使用uom-ri庫的METRE從本質上檢索Length-dimensioned單元的列表,並且一直獲取空集: 'Set <?擴展單元> units = system.getUnits(METRE.getDimension());' 有關我如何濫用API的任何指導?我真的需要這個UI來輸入/更新數量。謝謝! – arpieb

+0

謝謝你指出。你使用了RI還是Java SE實現?我們將嘗試複製它,並告訴如何更改呼叫或必要時修復問題。 –