unitsofmeasurement / unit-api

Units of Measurement API
http://unitsofmeasurement.github.io/unit-api/
Other
182 stars 42 forks source link

Enable discovery of prefix classes via SPI #228

Closed rockyallen closed 3 years ago

rockyallen commented 3 years ago

Given a service provider, how can I list all of its prefixes? There is a method to return the prefixes in a particular class, but I can't see a way to discover those classes. maybe

Collection getPrefixClasses() in SystemOfUnitsService?

keilw commented 3 years ago

IMO that's not for the API or SPI. There are several different implementations of Prefix, e.g. IndianPrefix or TamilPrefix in systems-common Reflection should be used to find a list of all classes that implement a particular interface like Prefix. There are several sources like:

Spring was also mentioned, but I'm not sure because the only methods I saw in something like ClassUtils do the exact opposite, a list of all interfaces a given class implements, but not the other way round.

The strong and versatile path scanner of BurningWave looks very compelling. Although it is a little older and not so often changed, Reflections.org should be as fine. Because the two most common prefixes are part of the API there is no need to discover them via reflection. And while it is not strictly mandated, just highly recommended most Prefix implementations are also enums and the exact class known. If you need such a flexible and powerful scanner of all implementing classes, please use one of the mentioned approaches, I don't see a use to put that into the API and force all implementations to do it if a majority does not need any other prefixes and a few that also define two or more extra enums know the exact class of these enums.