2017-07-07 2 views
0

Nous utilisons le grand cadre unit-of-measurement pour gérer les unités dynamiquement. J'ai l'obligation de filtrer une liste d'unités par quantité. Par exemple. afficher toute la masse (tonne, kg ....). La liste aboutit à une liste de capture générique (ce qui n'est pas idéal - je sais). Les informations génériques n'existent pas à l'exécution (uniquement au moment de la compilation). Cependant, pour l'interface unit une implémentation existe pour vérifier la compatibilité existe:filtre de l'unité de mesure par quantité

  • booléenne isCompatible (unité qui);

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

Y at-il une interface pour vérifier la compatibilité par quantity?

Exemple non-fonctionnel avec la quantité Mass.

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

Répondre

1

Ceci est un problème commun du langage Java car Java jusqu'à présent n'offre pas Reified Generics.

Je ne suis pas conscient que cette fonctionnalité l'a intégrée à Java SE 9, donc nous ne la verrons probablement pas avant Java 10 ou plus tard.

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

retourne l'appareil par défaut (ou système) pour une classe donnée Quantity. Et bien que Dimension soit plus un «parapluie» aux quantités, vous pouvez également obtenir une liste de toutes les unités sous une dimension particulière.

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

Dans une future version de l'API/SPI SystemOfUnits peut également offrir quelque chose de similaire pour une classe Quantity, mais il est tout à fait possible ce genre de méthode supplémentaire ne sera pas beaucoup de sens avant la plate-forme Java sous-jacente offre réifié génériques ou d'une autre façon de mieux taper des informations que ce n'est le cas aujourd'hui.

+0

Merci - la solution de contournement avec l'unité par défaut (ou système) pour la quantité me fonctionne. – itstata

+0

J'essaye l'approche getUnits() avec le 'METRE' de la bibliothèque d'uom-ri pour récupérer essentiellement une liste d'unités dimensionnées en longueur, et continuer à obtenir des ensembles vides: ' Set > units = system.getUnits (METRE.getDimension()); ' Des conseils sur la façon dont j'utilise abusivement l'API? J'ai vraiment besoin de cela pour une interface utilisateur pour entrer/mettre à jour des quantités. Merci! – arpieb

+0

Merci d'avoir signalé cela. Avez-vous utilisé l'implémentation RI ou Java SE? Nous essaierons de le répliquer et de dire comment changer l'appel ou, si nécessaire, corriger les problèmes. –