2016-11-02 5 views
3
package a; 
public class A { 
    public String toString() { 
    // return "I am an a.A"; is too primitive ;) 
    return "I am an " + getClass().getName(); // should give "a.A" 
    } 
} 

-как увидеть имя класса, содержащий фактический код

package a; 
public class X extends A { 
    public static void main(String[] args) { 
    X test = new X(); 
    System.out.println(test); // returns "I am an a.X" 
    } 
} 

Я также попытался с this.getClass() и super.getClass(). Как я могу получить имя класса, где toString() и getClass() закодированы на самом деле? (A.A)

Это просто упрощенный пример, моя точка как избежать жесткого кодирования имени базового класса в первом файле (A.java)

+2

Уже ответил здесь: [ссылка] (http://stackoverflow.com/a/ 6271460/6296931) –

+0

@ Coder ACJHP: Не совсем, или я его не нашел. Вопрос все равно. – datafiddler

ответ

1

изменения:

getClass().getName() 

в

A.class.getName() 
+0

'this.class' wont do -" Литерал класса - это выражение, состоящее из имени класса, интерфейса, массива или примитивного типа, за которым следует '. ' и класс токена. Он оценивает объект типа Class, объект класса для именованного типа (или для void). " –

5
package a; 
public class A { 
    public String toString() { 
    return "I am an " + A.class.getName(); 
    } 
} 

должен сделать трюк.

1

просто перебрать все супер

public String toString() { 
    Class cl = getClass(); 
    while (cl.getSuperclass() != Object.class) 
    cl = cl.getSuperclass(); 
    return cl.getName(); 
} 
Смежные вопросы