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

Java 如何使用反射从静态方法获取类名,java,reflection,Java,Reflection,我正在寻找一种获取调用静态方法的类的类名的方法 例如: 及 你知道怎么解决吗? 谢谢 这是一种非常容易引起误解的调用静态方法的方法。这应该是非法的。静态方法不是虚拟的。绝对没有可能的方法去做你想做的事情 这应该输出“MyInheritingClass”而不是“MySuperClass” 那么为什么不: MyInheritingClass.class.getSimpleName() 试试这个: public class MySuperClass{ public String getC

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

例如:

你知道怎么解决吗? 谢谢

这是一种非常容易引起误解的调用静态方法的方法。这应该是非法的。静态方法不是虚拟的。绝对没有可能的方法去做你想做的事情

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

那么为什么不:

MyInheritingClass.class.getSimpleName()
试试这个:

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());
    }
}
试试这个

this.getClass().getCanonicalName()

我想getClassName()应该是静态的……是的……我认为这是OP的一个输入错误。显然,这不再是静态的。是的,我知道这应该是可行的…实际上我在寻找一个“静态”解决方案…但似乎我在做一些不合法的事情=)@ArtoAle:类不会继承静态方法/字段,所以你可能想做一些非法的事情。是的,我意识到我的错误=)现在我将使用非静态解决方案,因为实际上我需要在超类中使用此属性,而不是在继承的超类=)然后可能:this.getClass().getSimpleName()?我不能在静态范围内引用“this=”)不,但是为什么要在静态范围内使用此属性?始终对声明该方法的类调用静态方法。这是一种调用该方法的有效方法,而无需在编译时知道最终实现该方法的类。如果主方法位于另一个编译单元中,现在可以在
myheritaringclass
中添加一个相同的命名静态方法,然后调用该方法(无需重新编译主方法)。(这不是解决问题的方法,但它还有其他用途。)@Paulo:没错;事实上,我的练习正试图证明相反的结果!我最初的反应与someboy从实例上下文调用静态方法时的反应类似,但情况不同。
MyInheritingClass.class.getSimpleName()
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());
    }
}
this.getClass().getCanonicalName()