2013-04-20 3 views
-2

Итак, у меня есть список актеров, и я хочу получить каждое динамическое имя класса Actors. Например, мой список исполнителей: Люди, Птицы, Коровы.Как получить динамическое имя класса объекта?

Я хочу получить в результате то же самое: «Люди, птицы, коровы», но без атрибута имени в классе Актеров. Является ли это возможным?

Пример кода (здесь вместо списка я использовал массив):

public Area map[][]; 
map[0][0] = new AntHillArea(); 
String name = map[0][0].getClass().getName(); //this results "Area" instead of AntHillArea 

Edit:. Были и другие проблемы с кодом, GetClass() GetName() работает отлично. Спасибо, в любом случае.

+2

Если все, что вам нужно, это имя класса не должны:. 'Actor.getClass() GetName()' хватает? –

+0

'getClass()' на объекте получит его класс. Но мне любопытно, для чего вам это нужно. – NilsH

+0

Нет, actor.getClass(). GetName() получает только имя «Актер». – CompanyCodeMonkey

ответ

4
String className = obj.getClass().getSimpleName(); 

Update:

public class Test { 
    public static void main(String[] args) { 
     Area map[][] = new Area[1][1]; 
     map[0][0] = new AntHillArea(); 
     String name = map[0][0].getClass().getSimpleName(); // returns "AntHillArea" 
     System.out.println(name); 
    } 
} 

class Area { 

} 

class AntHillArea extends Area { 

} 

Используйте getSimpleName метод. Он дает вам только класс и удалит любой пакет, если он есть.

+0

Но если я правильно понял это, вы хотите, чтобы я добавил это как метод для каждого из моих классов? – CompanyCodeMonkey

+1

Нет, совсем нет. Это уже есть. –

+0

Это не я хочу. Я добавил пример на мой вопрос. – CompanyCodeMonkey

1

Вы можете сделать это:

class Dog 
{ 
    //code 
    public String getName() 
    { 
     return Dog.class.getName(); 
    } 

    //better 
    @Override 
    public String toString() 
    { 
     return Dog.class.getName(); 
    } 
} 

и аналогично для каждого класса. Или иметь глобальный характер, как указано в других ответах, как:

public static String getClassName(Class<?> clas){ 
return clas.getName(); 
} 

Чтобы использовать Dog dog = new Dog(); getClassName(dog.class);

Смежные вопросы