Как получить имя класса из статического метода, используя отражение - PullRequest
1 голос
/ 15 февраля 2011

Я ищу способ получения имени класса, для которого вызывается статический метод.

например:

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"
        }
    }

Есть идеи, как это решить? спасибо

Ответы [ 4 ]

4 голосов
/ 15 февраля 2011
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"
    }
}

Это очень вводящий в заблуждение способ вызова статического метода. Это должно быть незаконно. Статические методы не являются виртуальными. Нет абсолютно никакого способа сделать то, что вы пытаетесь сделать.

1 голос
/ 15 февраля 2011

Попробуйте это:

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());
    }
}
1 голос
/ 15 февраля 2011

это должно вывести «MyInheritingClass», а НЕ «MySuperClass»

Тогда почему бы просто:

MyInheritingClass.class.getSimpleName()

0 голосов
/ 23 января 2013

попробуйте

this.getClass().getCanonicalName()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...