On 14/07/2018 14:00, Michał Zegan wrote:
Hello.
When reading docs for jdk9 and jdk10 it seems that those methods work in
a bit different way when it goes to encapsulation:
Module.getResourceAsStream will retrieve the resource without a problem
if a package is opened to the caller module, probably including the fact
that it will find a resource when the calling module is the same as one
represented by the module object.
But, ClassLoader.getResources and other resource methods seem to require
unconditional package open.
Why? I don't quite understand that distinction.
ClassLoaders, especially in a delegation chain, have no notion of "who" is trying to locate the resource. The ClassLoader.getResourceXXX methods are also not final. All told, the ClassLoader.getResourceXXX cannot reliably support qualified opens so this is why they are specified to only locate resources in modules when the package is open to all modules.

The general guideline is to use Class or Module getResourceXXX when you want to locate a resource in your own module or another specific module. Use ClassLoader.getResourceXXX when you want to search the class path. If you follow that then it makes it a lot easier to migrate existing code to modules.

-Alan

Reply via email to