On 22/06/2016 21:31, Alex Buckley wrote:
Hi Gunnar,
Thanks. Yes, I suspected you were using ServiceLoader::load to get a
dummy instance of each custom constraint validator class (in general,
there might be multiple modules providing a validator for
@Min-on-int), and then obtaining each dummy's Class object and doing
your own instantiations of validator classes thereafter.
It wouldn't help if ServiceLoader simply returned the Class objects
for service implementations, because you still wouldn't be able to
newInstance() them without the export. You would need ServiceLoader to
take one of those Class objects back (call it cImpl), along with the
Class object for a service interface (call it cIntf), and then
instantiate cImpl on your behalf if a) cIntf.isAssignableFrom(cImpl)
and b) <<some caller-sensitive conditions>>. No more export needed.
There has been a number of experiments and proposals along these lines
over the years. I think the most recent was a way to filter and order
based on the provider type. It needs more thought to see if this is the
right thing to do or not.
-Alan.