2017-07-07 7 views
0

私たちはユニットを動的に管理するために偉大なunit-of-measurementフレームワークを使用しています。私は数量で単位のリストをフィルタリングするという要件を持っています。例えば。すべての質量を表示する(tonne、kg ....)。このリストの結果は、一般的なキャプチャリストになります(これは理想的ではありません - 私は知っています)。一般情報は実行時には存在しません(コンパイル時のみ)。しかしながらunitインタフェースの実装は、互換性が存在する確認するために存在する:数量単位のフィルタ

  • ブールisCompatible(単位こと)。

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

quantityでcompatiblityをチェックする任意のインターフェイスはありますか?

量がMassの非実用例。

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

答えて

1

これまでのJavaでは、Reified Genericsが提供されていないため、これはJava言語の共通の問題です。

私はこの機能がJava SE 9になったことに気づいていないので、Java 10以降より前には表示されない可能性があります。

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

は、Quantityクラスのデフォルト(またはシステム)単位を返します。 Dimensionは数量の「傘」ではありますが、特定の次元に属するすべてのユニットのリストを取得することもできます。 APIの将来のバージョンで

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

/SPI SystemOfUnitsQuantityクラスの同様のものを提供することがありますが、基本的なJavaプラットフォームを具体化提供しています前に、追加のメソッドのこの種のはあまり意味がありません、かなり可能ですジェネリック医薬品や他の方法より優れたタイプの情報を提供することができます。

+0

ありがとうございます - 数量のデフォルト(またはシステム)単位の回避策が働いています。 – itstata

+0

私はuom-riライブラリの 'METRE'を使ってgetUnits()のアプローチを試しています。長さの単位のリストを本質的に取得し、空のセットを取得し続けます: ' Set <?ユニット> units = system.getUnits(METRE.getDimension()); ' APIの誤用に関するガイダンスはありますか?数量を入力/更新するためのUIが必要です。ありがとう! – arpieb

+0

それを指摘してくれてありがとう。 RIまたはJava SE実装を使用しましたか?私たちはそれを複製し、通話の変更方法や必要に応じて問題を修正する方法を教えます。 –

関連する問題