2013-03-16 3 views
6

Я хочу иметь метод, который создаст объект класса и автоматически назовет его "b1" для первого объекта, "b2" для второго и т. Д. Могу ли я использовать String как имя нового объекта? Если это возможно, как мне это сделать?Именование нового объекта после строки?

class being { 
    static int count = 0; 
    String name; 

    void createbeing(){ 
     name = "b" + Integer.toString(count); 
     being name = new being(); //Here I want to insert the String name as the name of the object 
     count++; 
    } 

} 
+10

Вы должны объяснить * почему * вы хотите сделать это, потому что маловероятно, что вам действительно нужно это делать. – assylias

+3

Если бы у меня была четверть каждого раза, это было задано здесь ... Пожалуйста, поймите, что 1) имя переменной не является именем объекта, а на самом деле у объекта нет имен, а объекты могут быть назначены для большего количества чем одна переменная. 2) имя переменной на самом деле не важно для текущей программы, но главное - это писать легко читаемый код, который легко отлаживать. 3) имя переменной для всех целей и целей даже не существует в запущенном коде.4) Что ** ** важно, это объекты * ссылки *. –

ответ

9

Нет, это невозможно в Java; вы не можете создавать переменные во время выполнения. Тем не менее, вы можете сохранить Map, который отображает String идентификаторы соответствующим Being s. т.е.

Map<String, Being> map = new HashMap<String, Being>(); 
... 
name = "b" + Integer.toString(count); 
map.put(name, new Being()); 
count++; 

Обратите внимание, что я предположил, что более обычное название: Being, в отличие от being.

+1

Ок, мне кажется, мне нужно узнать что-то новое :) Спасибо! – Syntic

2

Могу ли я использовать строку в качестве имени объекта?

No. Обычный способ сделать это было бы использовать одну из реализаций List и добавить объекты к нему, например:

class being{ 
    static List<being> beings = new LinkedList<being>(); 

    void createbeing(){ 
     beings.add(new being()); 
    } 
} 

не выступает с использованием статического список существ. Почти наверняка лучший подход к большей проблеме, которую вы пытаетесь решить, но это был минимальный мод для кода, который вы представили.)

В качестве альтернативы вы можете использовать Map и фактически получить t он называет вы хотели ("b1" и так далее):

class being{ 
    static int count = 0; 
    static Map<String,being> beings = new HashMap<String,being>(); 

    void createbeing(){ 
     count++; 
     beings.add("b" + count, new being()); 
    } 
} 

(То же самое предостережение, как описано выше.)

1

Этого нельзя достичь таким образом. Если имя переменного важно для вас, магазина, как клавиши Map<String,being>

Map<String,being> map = new HashMap<String,being>(); 
map.put("b1", new being()); 
2

Добавить имя атрибут в класс (который должен быть имя Being, кстати, и не being), и в его конструктор :

public class Being 
    private String name; 

    public Being(String name) { 
     this.name = name; 
    } 
} 

Затем создайте свои объекты:

void createBeing(){ 
    name = "b" + Integer.toString(count); 
    Being being = new Being(name); 
    // TODO: do something with the Being object 
    count++; 
} 

Вот как объект может иметь имя. Не путайте объекты и переменные.

+0

Пока это лучший способ ... ответить на его вопрос – Pragnani

3

В коде вы просто создаете локальную ссылку объекта класса в функции «createbeing()», и указанное выше имя «String» указано в области действия «createbeing()» ссылкой " имя ", которое вы объявляете как ссылку на объект класса.

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