Hi Mandy, Yes, that it was my code is doing now, I unreflect a member and then test if an exception is thrown. However, it is just a bit of an antipattern, catching exception to test a condition.
I would prefer if something like this was available: boolean Lookup.isAccessible(Member member) boolean Lookup.isAccessible(Class<?> member) /Kasper On Tue, 23 Oct 2018 at 00:07, Mandy Chung <mandy.ch...@oracle.com> wrote: > Lookup.accessClass(member.getDeclaringClass()) can be used to test > if the lookup class can access the declaring class of the given member. > This only checks if a class is accessible. I think unreflecting a member > will do what you are looking for to check if the lookup object has access > to the member. What does the code do if the Lookup object has access > vs has no access? > > Mandy > > On 10/22/18 1:17 PM, Kasper Nielsen wrote: > > Hi, > > Are there any elegant way to test if a Lookup object has access to a member > (field, constructor, method). Right now I'm using the following code > > public static boolean hasAccess(MethodHandles.Lookup lookup, Member member) > { > > if (member instanceof Constructor) { > > try { > > lookup.unreflectConstructor((Constructor<?>) member); > > } catch (IllegalAccessException e) { > > return false; > > } > > } else if (member instanceof Method) { > > try { > > lookup.unreflect((Method) member); > > } catch (IllegalAccessException e) { > > return false; > > } > > } else if (member instanceof Field) { > > try { > > lookup.unreflectVarHandle((Field) member); > > } catch (IllegalAccessException e) { > > return false; > > } > > } > > return true; > > } > > Cheers > Kasper > > >