0

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

  • boolean isCompatible(Unit that);

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

数量で互換性を確認するインターフェイスはありますか?

数量Massを使用した非動作例。

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

1 に答える 1

2

Java は今のところReified Genericsを提供していないため、これは Java 言語の一般的な問題です。

この機能が 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 プラットフォームが具体化されたジェネリックまたはより適切な型情報の他の方法を提供する前に、あまり意味をなさない可能性が十分にあります。今日よりも。

于 2017-07-10T17:25:52.507 に答える