如何使用反射从静态方法获取类名

发布于 2024-10-17 15:29:21 字数 532 浏览 4 评论 0原文

我正在寻找一种获取调用静态方法的类的类名的方法。

例如:

public  class MySuperClass{
    public static String getClassName(){
        //some trick here...
    }
}

知道

public  class MyInheritingClass extends MySuperClass{
        //some interesting code here...
        public static void main(String [ ] args){
            System.out.println(MyInheritingClass.getClassName());
            //this should output "MyInheritingClass" and NOT "MySuperClass"
        }
    }

如何解决吗? 谢谢

i'm looking for a way of getting the class name of the class a static method is invoked on.

eg:

public  class MySuperClass{
    public static String getClassName(){
        //some trick here...
    }
}

and

public  class MyInheritingClass extends MySuperClass{
        //some interesting code here...
        public static void main(String [ ] args){
            System.out.println(MyInheritingClass.getClassName());
            //this should output "MyInheritingClass" and NOT "MySuperClass"
        }
    }

Any idea of how to work it out?
thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

氛圍 2024-10-24 15:29:21
public  class MyInheritingClass extends MySuperClass{
    //some interesting code here...
    public static void main(String [ ] args){
        System.out.println(MyInheritingClass.getClassName());
        //this should output "MyInheritingClass" and NOT "MySuperClass"
    }
}

这是一种非常具有误导性的调用静态方法的方式。这应该是非法的。静态方法不是虚拟的。绝对没有可能的方法来做你想做的事。

public  class MyInheritingClass extends MySuperClass{
    //some interesting code here...
    public static void main(String [ ] args){
        System.out.println(MyInheritingClass.getClassName());
        //this should output "MyInheritingClass" and NOT "MySuperClass"
    }
}

This a very misleading way of invoking a static method. It should be illegal. Static methods are not virtual. There is absolutely no possible way to do what you're trying to do.

不寐倦长更 2024-10-24 15:29:21

这应该输出“MyInheritingClass”而不是“MySuperClass”

那么为什么不只是:

MyInheritingClass.class.getSimpleName()

this should output "MyInheritingClass" and NOT "MySuperClass"

Then why not just:

MyInheritingClass.class.getSimpleName()

?

独守阴晴ぅ圆缺 2024-10-24 15:29:21

试试这个:

public  class MySuperClass{
    public  String getClassName(){
        return getClass().getName();
    }
}


public  class MyInheritingClass extends MySuperClass{
    public static void main(String [ ] args){
        System.out.println(new MyInheritingClass().getClassName());
    }
}

Try this:

public  class MySuperClass{
    public  String getClassName(){
        return getClass().getName();
    }
}


public  class MyInheritingClass extends MySuperClass{
    public static void main(String [ ] args){
        System.out.println(new MyInheritingClass().getClassName());
    }
}
薄荷→糖丶微凉 2024-10-24 15:29:21

试试这个

this.getClass().getCanonicalName()

try this

this.getClass().getCanonicalName()
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文