2013-03-16 17 views
6

Voglio avere un metodo che creerà un oggetto della classe e lo chiamerà automaticamente "b1" per il primo oggetto, "b2" per il secondo e così via. Posso usare un String come nome di un nuovo oggetto? Se è possibile, come lo faccio?Denominare un nuovo oggetto dopo una stringa?

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

Dovresti spiegare * perché * vuoi farlo perché è improbabile che tu abbia davvero bisogno di farlo. – assylias

+3

Se avessi un quarto per ogni volta che questo è stato chiesto qui, ... Si prega di capire che 1) il nome della variabile non == il nome dell'oggetto, e infatti gli oggetti non hanno nomi e gli oggetti possono essere assegnati a più di una variabile. 2) il nome della variabile in realtà non è importante per il programma in esecuzione, ma piuttosto l'importanza principale è scrivere un codice leggibile dall'uomo che sia facile da eseguire il debug. 3) il nome della variabile a tutti gli effetti non esiste nemmeno nel codice in esecuzione.4) Ciò che ** è ** importante sono i riferimenti * dell'oggetto *. –

risposta

9

No, questo non è possibile in Java; non è possibile creare variabili in fase di runtime. Tuttavia, è possibile mantenere un Map che associa gli identificatori String ai corrispondenti Being s. cioè

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

noti che ho assunto un nome più convenzionale: Being al contrario di being.

+1

Ok, mi sembra, devo imparare qualcosa di nuovo :) Grazie! – Syntic

2

Posso usare una stringa come nome di un oggetto?

No. Il solito modo per farlo sarebbe quello di utilizzare una delle implementazioni List e aggiungere gli oggetti ad esso, ad esempio:

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

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

(io sono non sostenendo con una statica elenco degli esseri: c'è sicuramente un approccio migliore al problema più ampio che stai cercando di risolvere.)

In alternativa, è possibile utilizzare uno Map e in realtà ottenere t egli nomi che volevi ("b1" e così via):

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

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

(stessa avvertenza come sopra.)

1

Questo non può essere raggiunto in questo modo. Se il nome della variabile è importante per voi, negozio come i tasti di un Map<String,being>

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

Aggiungere un attributo name per la classe (che dovrebbe essere nominato Being, BTW, e non being), e per il suo costruttore :

public class Being 
    private String name; 

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

quindi creare l'oggetti:

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

Ecco come un oggetto può avere un nome. Non confondere oggetti e variabili.

+0

Finora questo è il modo migliore ... per rispondere alla sua domanda – Pragnani

3

Nel codice si sta solo creando un riferimento locale dell'oggetto classe nella funzione "createbeing()" e il "nome" stringa dichiarato sopra è nascosto nello scope della funzione "createbeing()" dal riferimento " nome "che stai dichiarando come riferimento dell'oggetto di classe.

Problemi correlati