2011-12-25 10 views
11

Questa è una domanda semplice (credo)Creazione di un nome di variabile con un valore String

Diciamo che ho questo codice (Supponendo ho una classe cane)

String name = "dog"; 
dog name = new dog(); 

Come posso ottenere java riconoscere il nome come una stringa e nominare il cane oggetto?

+3

Perché vuoi farlo? Sicuramente c'è un modo migliore per ottenere ciò che stai cercando di fare. –

+1

Probabilmente dovresti conoscere l'API di reflection di Java se è quello che vuoi. – fge

+0

Penso che il titolo e il contenuto di questa domanda siano incoerenti. Sembra che tu * non * stia tentando di creare una variabile il cui nome è basato sul valore di una stringa. Piuttosto sembra che tu voglia impostare la classe di una variabile in base al valore della stringa. Se quest'ultimo è il caso, il modello 'Factory' potrebbe aiutare. – Kavka

risposta

37

Mentre si può fare ciò che si prova in alcuni linguaggi di scripting come PHP (e questa domanda viene spesso posta da molti programmatori PHP che avviano Java), questo non è il modo in cui Java funziona, e infatti i nomi delle variabili sono un molto meno importante di quanto tu possa realizzare e difficilmente esiste anche dopo la compilazione del codice. Ciò che è molto più importante e la chiave sono variabili riferimenti: la possibilità di accedere a un particolare oggetto in un punto particolare del programma e si può fare in modo che le stringhe facciano riferimento agli oggetti semplicemente utilizzando una mappa come unico senso.

Per esempio

Map<String, Dog> dogMap = new HashMap<String, Dog>(); 
dogMap.put("Fido", new Dog("Fido")); 

Dog myPet = dogMap.get("Fido"); 

Oppure si può ottenere riferimenti a oggetti in molti altri modi, come tramite gli array, ArrayLists, LinkedLists o diversi altri collectinos.

Modifica
È stato:

Il fatto è che nel mio codice ho intenzione di utilizzare un metodo per creare oggetti, il nome dell'oggetto è arbitraria, ma ho bisogno di essere dinamico perché non è temporaneo, quindi il nome effettivo dell'oggetto deve cambiare o scriverò sopra l'oggetto dichiarato in precedenza.

Questo è esattamente ciò che intendevo quando ho detto che il nome della variabile non è così importante come si pensa. Il nome della variabile è non il "nome oggetto" (questo in realtà non esiste di fatto).

Per esempio, se si crea un cane in una variabile denominata Fido, e poi assegnarlo a un nuovo spot variabile chiamata, entrambe le variabili, pur avendo nomi diversi si riferiscono alla stessa oggetto:

Dog fido = new Dog; 
Dog spot = fido; // now fido and spot refer to the same object 

Se si vuole dare una variabile un "nome" in considerazione dando la classe una proprietà nome:

class Dog { 
    private String name; 

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

    public String getName() { 
     return name; 
    } 
} 

ora è possibile dare ad ogni cane oggetto proprio (semi) nome univoco, se lo si desidera.

+0

Il fatto è che nel mio codice userò un metodo per creare oggetti, il nome dell'oggetto è arbitrario, ma ho bisogno che sia dinamico perché non sarà temporaneo, quindi il nome effettivo dell'oggetto deve cambiare o scriverò sopra l'oggetto precedentemente dichiarato. –

+0

@charleshorvath: vedere modifica –

+0

Bene, il metodo descritto in questa risposta consente di fare proprio questo! –

5

Non penso che stiate pensando allo Enums?

private static void test() { 
    Animal animal = Animal.valueOf("Dog"); 
} 

enum Animal { 
    Dog, 
    Cat, 
    Cow, 
    Pig, 
    Rat, 
    Ant, 
    Gnu; 
} 
Problemi correlati