Reflection的getCallerClass的使用

Reflection的getCallerClass的使用:可以得到调用者的类.这个方法是很好用的.

0 和小于0  -   返回 Reflection类

1  -   返回自己的类

2  -    返回调用者的类

3. 4. ....层层上传。

package com.huangyunbin;

import sun.reflect.Reflection;

public class Test
{
    public static void main(String[] args)
    {
        Test2 test=new Test2();
        test.g();
    }
}


 class Test2
{
    public  void g(){
        gg();
    }
    public  void gg(){
        System.out.println(Reflection.getCallerClass(-1));
        System.out.println(Reflection.getCallerClass(0));
        System.out.println(Reflection.getCallerClass(1));
        System.out.println(Reflection.getCallerClass(2));
        System.out.println(Reflection.getCallerClass(3));
        System.out.println(Reflection.getCallerClass(4));
        System.out.println(Reflection.getCallerClass(5));
    }

}


输出:

class sun.reflect.Reflection

class sun.reflect.Reflection

class com.huangyunbin.Test2

class com.huangyunbin.Test2

class com.huangyunbin.Test

class com.intellij.rt.execution.application.AppMain

null



权限

    Reflection.getCallerClass()此方法的调用者必须有权限,需要什么样的权限呢?

        由bootstrap class loader加载的类可以调用

        由extension class loader加载的类可以调用

    都知道用户路径的类加载都是由 application class loader进行加载的,换句话说就是用户自定义的一些类中无法调用此方法

作用

Reflection.getCallerClass()方法调用所在的方法必须用@CallerSensitive进行注解,通过此方法获取class时会跳过链路上所有的有@CallerSensitive注解的方法的类,直到遇到第一个未使用该注解的类,避免了用Reflection.getCallerClass(int n) 这个过时方法来自己做判断。

参考:https://blog.csdn.net/HEL_WOR/article/details/50199797

---------------------

作者:samyang1

来源:CSDN

原文:https://blog.csdn.net/samyang1/article/details/81482940

版权声明:本文为博主原创文章,转载请附上博文链接!

你可能感兴趣的:(Reflection的getCallerClass的使用)