Replacement of sun.reflect.Reflection#getCallerClass

Jochen Theodorou blackdrag at gmx.org
Tue Sep 3 17:40:13 UTC 2013


Am 03.09.2013 19:16, schrieb Peter Levart:
[...]
> What about a simple restriction on methods returning such instances that
> Class objects are only returned when they are resolvable from the
> ClassLoader of client code. If they are not resolvable, null is
> returned. For example, the equivalent of:
>
> public class StackTraceFrame {
>
>      private final Class<?> declaringClass;
>
>      @CallerSensitive
>      public Class<?> getDeclaringClass() {
>          try {
>              return Class.forName(declaringClass.getName(),
>                                   false,
> Reflection.getCallerClass().getClassLoader())
>                     == declaringClass ? declaringClass : null;
>              }
>          } catch (ClassNotFoundException ignore) {}
>          return null;
>      }
>
>      // the name can be exposed without fear...
>      public String getDeclaringClassName() {
>          return declaringClass.getName();
>      }
>
>
> This example could be implemented more efficiently then above code
> (using private Class/ClassLoader API).

for us it is the standard case, that the client code is not able to 
resolve the caller class. The code making the call to the method, that 
needs the information in the end is usually in a sub loader of the 
loader in which the declaring class of the method making use of the 
information is. Not always, but usually. Thus this would be useless to us

bye Jochen

-- 
Jochen "blackdrag" Theodorou - Groovy Project Tech Lead
blog: http://blackdragsview.blogspot.com/
german groovy discussion newsgroup: de.comp.lang.misc
For Groovy programming sources visit http://groovy-lang.org




More information about the core-libs-dev mailing list