Variablen benennen: Unterschied zwischen den Versionen

Aus Byte-Welt Wiki
Zur Navigation springenZur Suche springen
K
K
 
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt)
Zeile 11: Zeile 11:
 
== Wie kann man Variablennamen nummerieren? ==
 
== Wie kann man Variablennamen nummerieren? ==
 
Wenn man viele Objekte erstellen will, und diese Objekte über Variablennamen ansprechen möchte, werden die Variablennamen oft einfach direkt durchnummeriert:
 
Wenn man viele Objekte erstellen will, und diese Objekte über Variablennamen ansprechen möchte, werden die Variablennamen oft einfach direkt durchnummeriert:
<code=java>
+
<syntaxhighlight lang="java">
 
String vorname0 = "Foo";
 
String vorname0 = "Foo";
 
String vorname1 = "Bar";
 
String vorname1 = "Bar";
Zeile 19: Zeile 19:
 
String vorname5 = "Boo";
 
String vorname5 = "Boo";
 
...
 
...
</code=java>
+
</syntaxhighlight>
  
 
Das ist sehr unflexibel, bläht den Code auf und ist sehr schlecht erweiterbar. Zusätzlich hat man dann das Problem, dass man häufig einen Index (eine Nummer) hat, und dan dazu passenden Variablennamen benötigt:
 
Das ist sehr unflexibel, bläht den Code auf und ist sehr schlecht erweiterbar. Zusätzlich hat man dann das Problem, dass man häufig einen Index (eine Nummer) hat, und dan dazu passenden Variablennamen benötigt:
<code=java>
+
<syntaxhighlight lang="java">
 
public String getVorname(int index)
 
public String getVorname(int index)
 
{
 
{
 
     return vorname //-->hier den 'index' einsetzen<--;
 
     return vorname //-->hier den 'index' einsetzen<--;
 
}
 
}
</code=java>
+
</syntaxhighlight>
  
 
Letzteres ist in dieser Form in Java nicht möglich. (Im Gegensatz zu PHP, wo man Variablennamen in dieser Form "zusammenbauen" kann). Den Index mit 'switch' oder einer 'if'-Abfrage zu überprüfen, und den passenden Vornamen zurückzugeben ist hier keine Abhilfe, sondern verschlimmert den Code nur.
 
Letzteres ist in dieser Form in Java nicht möglich. (Im Gegensatz zu PHP, wo man Variablennamen in dieser Form "zusammenbauen" kann). Den Index mit 'switch' oder einer 'if'-Abfrage zu überprüfen, und den passenden Vornamen zurückzugeben ist hier keine Abhilfe, sondern verschlimmert den Code nur.
Zeile 33: Zeile 33:
 
=== Im einfachsten Fall: Mit einem Array ===
 
=== Im einfachsten Fall: Mit einem Array ===
 
In den meisten Fällen ist die Lösung für dieses Problem ein einfacher Array. Dieser Array kann direkt bei der Erstellung oder mit einzelnen Anweisungen mit den passenden Daten gefüllt werden:
 
In den meisten Fällen ist die Lösung für dieses Problem ein einfacher Array. Dieser Array kann direkt bei der Erstellung oder mit einzelnen Anweisungen mit den passenden Daten gefüllt werden:
<code=java>
+
<syntaxhighlight lang="java">
 
String[] vornamen = new String[] { "Foo", "Bar", "Foobar", "Barfoo", "Far", "Boo" };
 
String[] vornamen = new String[] { "Foo", "Bar", "Foobar", "Barfoo", "Far", "Boo" };
</code=java>
+
</syntaxhighlight>
  
 
oder
 
oder
  
<code=java>
+
<syntaxhighlight lang="java">
 
String[] vornamen = new String[6];
 
String[] vornamen = new String[6];
 
vornamen[0] = "Foo";
 
vornamen[0] = "Foo";
Zeile 45: Zeile 45:
 
vornamen[2] = "Foobar";
 
vornamen[2] = "Foobar";
 
...
 
...
</code=java>
+
</syntaxhighlight>
  
 
Alle Vornamen mit einer for-Schleife zu durchlaufen, oder mit einem Index auf einen einzelnen Vornamen zuzugreifen ist damit ganz einfach:
 
Alle Vornamen mit einer for-Schleife zu durchlaufen, oder mit einem Index auf einen einzelnen Vornamen zuzugreifen ist damit ganz einfach:
<code=java>
+
<syntaxhighlight lang="java">
 
public String getVorname(int index)
 
public String getVorname(int index)
 
{
 
{
 
     return vorname[index];
 
     return vorname[index];
 
}
 
}
</code=java>
+
</syntaxhighlight>
  
 
Weitere Informationen zur Verwendung von Arrays findet man in allen gängigen Tutorials, zum Beispiel dem online verfügbaren Buch [http://openbook.galileocomputing.de/javainsel/ Java ist auch eine Insel], und dort im [http://openbook.galileocomputing.de/javainsel/javainsel_03_008.html#dodtp9894e88c-16e7-4052-8cc7-1f947e09e784 Kapitel 3.8: Arrays]. Alternativ dazu kann man sich auch das [http://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html Kapitel über Arrays] aus dem [http://docs.oracle.com/javase/tutorial/java/nutsandbolts/index.html Java-Grundlagentutorial] von Oracle (früher Sun) ansehen.
 
Weitere Informationen zur Verwendung von Arrays findet man in allen gängigen Tutorials, zum Beispiel dem online verfügbaren Buch [http://openbook.galileocomputing.de/javainsel/ Java ist auch eine Insel], und dort im [http://openbook.galileocomputing.de/javainsel/javainsel_03_008.html#dodtp9894e88c-16e7-4052-8cc7-1f947e09e784 Kapitel 3.8: Arrays]. Alternativ dazu kann man sich auch das [http://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html Kapitel über Arrays] aus dem [http://docs.oracle.com/javase/tutorial/java/nutsandbolts/index.html Java-Grundlagentutorial] von Oracle (früher Sun) ansehen.
Zeile 59: Zeile 59:
 
=== Im komplizierteren Fall: Auch mit einem Array ===
 
=== Im komplizierteren Fall: Auch mit einem Array ===
 
Wenn man mehrere Daten hat, die zusammen gehören, sieht man häufig Code wie diesen:
 
Wenn man mehrere Daten hat, die zusammen gehören, sieht man häufig Code wie diesen:
<code=java>
+
<syntaxhighlight lang="java">
 
String vorname0 = "Foo";
 
String vorname0 = "Foo";
 
String nachname0 = "Oof";
 
String nachname0 = "Oof";
Zeile 72: Zeile 72:
 
int punktestand2 = "789";
 
int punktestand2 = "789";
 
....
 
....
</code=java>
+
</syntaxhighlight>
  
 
Das könnte einen dazu verleiten, mehrere Arrays zu erstellen:
 
Das könnte einen dazu verleiten, mehrere Arrays zu erstellen:
<code=java>
+
<syntaxhighlight lang="java">
 
String[] vornamen = new String[6];
 
String[] vornamen = new String[6];
 
String[] nachname = new String[6];
 
String[] nachname = new String[6];
 
int[] punktestaende[]; = new int[6];
 
int[] punktestaende[]; = new int[6];
 
...
 
...
</code=java>
+
</syntaxhighlight>
  
 
Allerdings ist diese Lösung wiederum sehr unübersichtlich, fehleranfällig und schlecht erweiterbar.
 
Allerdings ist diese Lösung wiederum sehr unübersichtlich, fehleranfällig und schlecht erweiterbar.
  
 
Stattdessen sollte man in Erwägung ziehen, eine Klasse "Datensatz" zu erstellen, die alle Informationen zusammenfasst:
 
Stattdessen sollte man in Erwägung ziehen, eine Klasse "Datensatz" zu erstellen, die alle Informationen zusammenfasst:
<code=java>
+
<syntaxhighlight lang="java">
 
class Datensatz
 
class Datensatz
 
{
 
{
Zeile 107: Zeile 107:
 
     public void setPunktestand(int punktestand) { this.punktestand = punktestand; }
 
     public void setPunktestand(int punktestand) { this.punktestand = punktestand; }
 
}
 
}
</code=java>
+
</syntaxhighlight>
  
 
Dann mann man die Daten wieder in einem Array ablegen, der dann 'Datensatz'-Objekte enthält:
 
Dann mann man die Daten wieder in einem Array ablegen, der dann 'Datensatz'-Objekte enthält:
<code=java>
+
<syntaxhighlight lang="java">
 
Datensatz[] datensaetze = new Datensatz[6];
 
Datensatz[] datensaetze = new Datensatz[6];
 
datensaetze[0]; = new Datensatz("Foo", "Oof", 123);
 
datensaetze[0]; = new Datensatz("Foo", "Oof", 123);
Zeile 121: Zeile 121:
 
// Punktestand für den Datensatz 2 setzen:
 
// Punktestand für den Datensatz 2 setzen:
 
datensaetze[2].setPunktestand(666);
 
datensaetze[2].setPunktestand(666);
</code=java>
+
</syntaxhighlight>
  
 
=== Wenn man die Anzahl der Variablen nicht kennt: Mit einer List ===
 
=== Wenn man die Anzahl der Variablen nicht kennt: Mit einer List ===
 
Wenn man die Anzahl der benötigten Variablen vorher nicht kennt, sollte man keinen Array verwenden, sondern eine List:
 
Wenn man die Anzahl der benötigten Variablen vorher nicht kennt, sollte man keinen Array verwenden, sondern eine List:
<code=java>
+
<syntaxhighlight lang="java">
 
import java.util.List;
 
import java.util.List;
 
import java.util.ArrayList;
 
import java.util.ArrayList;
Zeile 135: Zeile 135:
 
...
 
...
 
//.... hier können beliebig viele weitere Datensätze hinzugefügt werden
 
//.... hier können beliebig viele weitere Datensätze hinzugefügt werden
</code=java>
+
</syntaxhighlight>
  
 
Auf die einzelnen Elemente der Liste kann man dann mit der 'get'-Methode zugreifen:
 
Auf die einzelnen Elemente der Liste kann man dann mit der 'get'-Methode zugreifen:
<code=java>
+
<syntaxhighlight lang="java">
 
// Nachname aus dem Datensatz 1 lesen:
 
// Nachname aus dem Datensatz 1 lesen:
 
String nachname = datensaetze.get(1).getNachname();  
 
String nachname = datensaetze.get(1).getNachname();  
Zeile 144: Zeile 144:
 
// Punktestand für den Datensatz 2 setzen:
 
// Punktestand für den Datensatz 2 setzen:
 
datensaetze.get(2).setPunktestand(666);
 
datensaetze.get(2).setPunktestand(666);
</code=java>
+
</syntaxhighlight>
  
 
Listen gehören zu einer Menge von Klassen, die man allgemein als "Collections" bezeichnet. Es gibt verschiedene Collections und Listen-Typen, die für verschiedene Aufgaben unterschiedlich gut geeignet sind. Wer mehr über diese Klassen erfahren will, kann sich im Buch [http://openbook.galileocomputing.de/javainsel/index.html Java ist auch eine Insel] das [http://openbook.galileocomputing.de/javainsel/javainsel_13_001.html#dodtpf016dc31-a49b-4fb1-a42e-c0f07375828b Kapitel 13: Datenstrukturen und Algorithmen], oder spziell das [http://openbook.galileocomputing.de/javainsel/javainsel_13_002.html#dodtp5e6355b5-c483-4ca9-92f6-7bb32314150d Kapitel 13.2: Listen] durchlesen. Zusätzlich gibt es natürlich von Oracle (früher Sun) auch ein [http://docs.oracle.com/javase/tutorial/collections/interfaces/collection.html Tutorial zu Collections] und ein [http://docs.oracle.com/javase/tutorial/collections/interfaces/list.html Tutorial zu Listen].
 
Listen gehören zu einer Menge von Klassen, die man allgemein als "Collections" bezeichnet. Es gibt verschiedene Collections und Listen-Typen, die für verschiedene Aufgaben unterschiedlich gut geeignet sind. Wer mehr über diese Klassen erfahren will, kann sich im Buch [http://openbook.galileocomputing.de/javainsel/index.html Java ist auch eine Insel] das [http://openbook.galileocomputing.de/javainsel/javainsel_13_001.html#dodtpf016dc31-a49b-4fb1-a42e-c0f07375828b Kapitel 13: Datenstrukturen und Algorithmen], oder spziell das [http://openbook.galileocomputing.de/javainsel/javainsel_13_002.html#dodtp5e6355b5-c483-4ca9-92f6-7bb32314150d Kapitel 13.2: Listen] durchlesen. Zusätzlich gibt es natürlich von Oracle (früher Sun) auch ein [http://docs.oracle.com/javase/tutorial/collections/interfaces/collection.html Tutorial zu Collections] und ein [http://docs.oracle.com/javase/tutorial/collections/interfaces/list.html Tutorial zu Listen].
Zeile 150: Zeile 150:
 
== Wie kann man "variable Variablennamen" vergeben? ==
 
== Wie kann man "variable Variablennamen" vergeben? ==
 
Manchmal kann man die Objekte, die erstellt werden, nicht einfach durchnummerieren. Zum Beispiel wenn die Namen der Objekte vom Benutzer vergeben werden sollen, und man später über diesen Namen wieder auf die Objekte zugreifen können will.
 
Manchmal kann man die Objekte, die erstellt werden, nicht einfach durchnummerieren. Zum Beispiel wenn die Namen der Objekte vom Benutzer vergeben werden sollen, und man später über diesen Namen wieder auf die Objekte zugreifen können will.
<code=java>
+
<syntaxhighlight lang="java">
 
void eingabe()
 
void eingabe()
 
{
 
{
Zeile 165: Zeile 165:
 
     //--- Wie kommt man hier an den 'datensatz' der zum eingegebenen 'objektnamen' passt?
 
     //--- Wie kommt man hier an den 'datensatz' der zum eingegebenen 'objektnamen' passt?
 
}
 
}
</code=java>
+
</syntaxhighlight>
  
 
=== "Variable Variablennamen" vergibt man mit einer Map ===
 
=== "Variable Variablennamen" vergibt man mit einer Map ===
 
In diesem Fall kann man die Daten in einer Map ablegen. Eine Map bildet einen Schlüssel (den 'objektnamen') auf einen Wert (den 'datensatz') ab. Man kann dann also mit Hilfe des 'objektnamens' auf den 'datensatz' zugreifen:
 
In diesem Fall kann man die Daten in einer Map ablegen. Eine Map bildet einen Schlüssel (den 'objektnamen') auf einen Wert (den 'datensatz') ab. Man kann dann also mit Hilfe des 'objektnamens' auf den 'datensatz' zugreifen:
<code=java>
+
<syntaxhighlight lang="java">
 
// Eine Map, die Strings ('objektname') abbildet auf Objekte vom Typ 'Datensatz':
 
// Eine Map, die Strings ('objektname') abbildet auf Objekte vom Typ 'Datensatz':
 
private Map<String, Datensatz> datenMap = new HashMap<String, Datensatz>();
 
private Map<String, Datensatz> datenMap = new HashMap<String, Datensatz>();
Zeile 195: Zeile 195:
 
     }
 
     }
 
}
 
}
</code=java>
+
</syntaxhighlight>
  
 
Maps werden im Buch [http://openbook.galileocomputing.de/javainsel/ Java ist auch eine Insel] im [http://openbook.galileocomputing.de/javainsel/javainsel_13_004.html#dodtp6da5370b-3e76-4c81-87c1-7c8d2c29c958 Kapitel 13.4: Assoziative Speicher] näher erklärt. Weitere Informationen findet man auch im [http://docs.oracle.com/javase/tutorial/collections/interfaces/map.html Tutorial über Maps] von Oracle (früher Sun).
 
Maps werden im Buch [http://openbook.galileocomputing.de/javainsel/ Java ist auch eine Insel] im [http://openbook.galileocomputing.de/javainsel/javainsel_13_004.html#dodtp6da5370b-3e76-4c81-87c1-7c8d2c29c958 Kapitel 13.4: Assoziative Speicher] näher erklärt. Weitere Informationen findet man auch im [http://docs.oracle.com/javase/tutorial/collections/interfaces/map.html Tutorial über Maps] von Oracle (früher Sun).
Zeile 201: Zeile 201:
 
== Wie kann man den Variablennamen zu einem gegebenen Objekt herausfinden? ==
 
== Wie kann man den Variablennamen zu einem gegebenen Objekt herausfinden? ==
 
Manchmal wird auch nach der umgekehrten Richtung gefragt: Wie kann man den Namen der Variablen herausfinden, der ein bestimmtes Objekt zugeordnet ist?
 
Manchmal wird auch nach der umgekehrten Richtung gefragt: Wie kann man den Namen der Variablen herausfinden, der ein bestimmtes Objekt zugeordnet ist?
<code=java>
+
<syntaxhighlight lang="java">
 
Daten meineDaten = new Daten();
 
Daten meineDaten = new Daten();
 
Daten deineDaten = new Daten();
 
Daten deineDaten = new Daten();
Zeile 208: Zeile 208:
 
Daten irgendwelcheDaten = meineDaten;
 
Daten irgendwelcheDaten = meineDaten;
 
String name = holeNamen(irgendwelcheDaten); // Soll den String "meineDaten" liefern
 
String name = holeNamen(irgendwelcheDaten); // Soll den String "meineDaten" liefern
</code=java>
+
</syntaxhighlight>
  
 
Man kann die Variablennamen nicht abfragen! ;)
 
Man kann die Variablennamen nicht abfragen! ;)
Zeile 231: Zeile 231:
 
{{Fragen stellen}}
 
{{Fragen stellen}}
  
[[Kategorie:Java]]
 
 
[[Kategorie:Java Grundlagen]]
 
[[Kategorie:Java Grundlagen]]
 
[[Kategorie:Programmierung Grundlagen]]
 
[[Kategorie:Programmierung Grundlagen]]

Aktuelle Version vom 7. April 2018, 16:26 Uhr

Benennung von Variablen

Hier sind die Antworten auf einige Fragen zu Variablennamen, die in ähnlicher Form immer wieder gestellt werden:

1. Wie kann man Variablennamen nummerieren?

2. Wie kann man "variable Variablennamen" vergeben?

3. Wie kann man den Variablennamen zu einem gegebenen Objekt herausfinden?

Wie kann man Variablennamen nummerieren?

Wenn man viele Objekte erstellen will, und diese Objekte über Variablennamen ansprechen möchte, werden die Variablennamen oft einfach direkt durchnummeriert:

String vorname0 = "Foo";
String vorname1 = "Bar";
String vorname2 = "Foobar";
String vorname3 = "Barfoo";
String vorname4 = "Far";
String vorname5 = "Boo";
...

Das ist sehr unflexibel, bläht den Code auf und ist sehr schlecht erweiterbar. Zusätzlich hat man dann das Problem, dass man häufig einen Index (eine Nummer) hat, und dan dazu passenden Variablennamen benötigt:

public String getVorname(int index)
{
    return vorname //-->hier den 'index' einsetzen<--;
}

Letzteres ist in dieser Form in Java nicht möglich. (Im Gegensatz zu PHP, wo man Variablennamen in dieser Form "zusammenbauen" kann). Den Index mit 'switch' oder einer 'if'-Abfrage zu überprüfen, und den passenden Vornamen zurückzugeben ist hier keine Abhilfe, sondern verschlimmert den Code nur.

Im einfachsten Fall: Mit einem Array

In den meisten Fällen ist die Lösung für dieses Problem ein einfacher Array. Dieser Array kann direkt bei der Erstellung oder mit einzelnen Anweisungen mit den passenden Daten gefüllt werden:

String[] vornamen = new String[] { "Foo", "Bar", "Foobar", "Barfoo", "Far", "Boo" };

oder

String[] vornamen = new String[6];
vornamen[0] = "Foo";
vornamen[1] = "Bar";
vornamen[2] = "Foobar";
...

Alle Vornamen mit einer for-Schleife zu durchlaufen, oder mit einem Index auf einen einzelnen Vornamen zuzugreifen ist damit ganz einfach:

public String getVorname(int index)
{
    return vorname[index];
}

Weitere Informationen zur Verwendung von Arrays findet man in allen gängigen Tutorials, zum Beispiel dem online verfügbaren Buch Java ist auch eine Insel, und dort im Kapitel 3.8: Arrays. Alternativ dazu kann man sich auch das Kapitel über Arrays aus dem Java-Grundlagentutorial von Oracle (früher Sun) ansehen.

Im komplizierteren Fall: Auch mit einem Array

Wenn man mehrere Daten hat, die zusammen gehören, sieht man häufig Code wie diesen:

String vorname0 = "Foo";
String nachname0 = "Oof";
int punktestand0 = "123";

String vorname1 = "Bar";
String nachname1 = "Rab";
int punktestand1 = "456";

String vorname2 = "Foobar";
String nachname2 = "Raboof";
int punktestand2 = "789";
....

Das könnte einen dazu verleiten, mehrere Arrays zu erstellen:

String[] vornamen = new String[6];
String[] nachname = new String[6];
int[] punktestaende[]; = new int[6];
...

Allerdings ist diese Lösung wiederum sehr unübersichtlich, fehleranfällig und schlecht erweiterbar.

Stattdessen sollte man in Erwägung ziehen, eine Klasse "Datensatz" zu erstellen, die alle Informationen zusammenfasst:

class Datensatz
{
    private String vorname;
    private String nachname;
    private int punktestand; 

    public Datensatz(String vorname, String nachname, int punktestand)
    {
         this.vorname = vorname;
         this.nachname = nachname;
         this.punktestand = punktestand;
    }

    // Get-Methoden für alle Daten:
    public String getVorname() { return vorname; }
    public String getNachname() { return nachname; }
    public int getPunktestand() { return punktestand; } 

    // Set-Methoden - NUR für die Daten, die nachträglich geändert werden können!
    public void setPunktestand(int punktestand) { this.punktestand = punktestand; }
}

Dann mann man die Daten wieder in einem Array ablegen, der dann 'Datensatz'-Objekte enthält:

Datensatz[] datensaetze = new Datensatz[6];
datensaetze[0]; = new Datensatz("Foo", "Oof", 123);
datensaetze[1]; = new Datensatz("Bar", "Rab", 456);
datensaetze[2]; = new Datensatz("Foobar", "Raboof", 789); 

// Nachname aus dem Datensatz 1 lesen:
String nachname = datensaetze[1].getNachname(); 

// Punktestand für den Datensatz 2 setzen:
datensaetze[2].setPunktestand(666);

Wenn man die Anzahl der Variablen nicht kennt: Mit einer List

Wenn man die Anzahl der benötigten Variablen vorher nicht kennt, sollte man keinen Array verwenden, sondern eine List:

import java.util.List;
import java.util.ArrayList;
...
List<Datensatz> datensaetze = new ArrayList<Datensatz>();
datensaetze.add(new Datensatz("Foo", "Oof", 123));
datensaetze.add(new Datensatz("Bar", "Rab", 456));
datensaetze.add(new Datensatz("Foobar", "Raboof", 789));
...
//.... hier können beliebig viele weitere Datensätze hinzugefügt werden

Auf die einzelnen Elemente der Liste kann man dann mit der 'get'-Methode zugreifen:

// Nachname aus dem Datensatz 1 lesen:
String nachname = datensaetze.get(1).getNachname(); 

// Punktestand für den Datensatz 2 setzen:
datensaetze.get(2).setPunktestand(666);

Listen gehören zu einer Menge von Klassen, die man allgemein als "Collections" bezeichnet. Es gibt verschiedene Collections und Listen-Typen, die für verschiedene Aufgaben unterschiedlich gut geeignet sind. Wer mehr über diese Klassen erfahren will, kann sich im Buch Java ist auch eine Insel das Kapitel 13: Datenstrukturen und Algorithmen, oder spziell das Kapitel 13.2: Listen durchlesen. Zusätzlich gibt es natürlich von Oracle (früher Sun) auch ein Tutorial zu Collections und ein Tutorial zu Listen.

Wie kann man "variable Variablennamen" vergeben?

Manchmal kann man die Objekte, die erstellt werden, nicht einfach durchnummerieren. Zum Beispiel wenn die Namen der Objekte vom Benutzer vergeben werden sollen, und man später über diesen Namen wieder auf die Objekte zugreifen können will.

void eingabe()
{
    String objektname = lassDenBenutzerEinenNamenMitDerTastaturEintippen();
    Datensatz datensatz = new Datensatz("Foo", "Oof",  123); 

    //--- Wie kann man hier den 'datensatz' unter dem eingegebenen 'objektnamen' abspeichern?
} 

void abfragen()
{
    String objektname = lassDenBenutzerEinenNamenMitDerTastaturEintippen();

     //--- Wie kommt man hier an den 'datensatz' der zum eingegebenen 'objektnamen' passt?
}

"Variable Variablennamen" vergibt man mit einer Map

In diesem Fall kann man die Daten in einer Map ablegen. Eine Map bildet einen Schlüssel (den 'objektnamen') auf einen Wert (den 'datensatz') ab. Man kann dann also mit Hilfe des 'objektnamens' auf den 'datensatz' zugreifen:

// Eine Map, die Strings ('objektname') abbildet auf Objekte vom Typ 'Datensatz':
private Map<String, Datensatz> datenMap = new HashMap<String, Datensatz>();

void eingabe()
{
    String objektname = lassDenBenutzerEinenNamenMitDerTastaturEintippen();
    Datensatz datensatz = new Datensatz("Foo", "Oof",  123);

    // Daten in die Map legen:
    datenMap.put(objektname, datensatz);
}

void abfragen()
{
    String objektname = lassDenBenutzerEinenNamenMitDerTastaturEintippen();

    // Daten für den gegebenen Namen aus der Map holen:     
    Datensatz datensatz = datenMap.get(objektname);

    // Falls für den gegebenen Namen ein Objekt gefunden wurde, kann man damit arbeiten:    
    if (datensatz != null)
    {
        System.out.println(datensatz.getVorname());
    }
}

Maps werden im Buch Java ist auch eine Insel im Kapitel 13.4: Assoziative Speicher näher erklärt. Weitere Informationen findet man auch im Tutorial über Maps von Oracle (früher Sun).

Wie kann man den Variablennamen zu einem gegebenen Objekt herausfinden?

Manchmal wird auch nach der umgekehrten Richtung gefragt: Wie kann man den Namen der Variablen herausfinden, der ein bestimmtes Objekt zugeordnet ist?

Daten meineDaten = new Daten();
Daten deineDaten = new Daten();
Daten seineDaten = new Daten();
...
Daten irgendwelcheDaten = meineDaten;
String name = holeNamen(irgendwelcheDaten); // Soll den String "meineDaten" liefern

Man kann die Variablennamen nicht abfragen! ;)

So ein "Abfragen des Variablennamens" ist nicht möglich. Der Grund dafür ist schon allein der, dass ein Objekt ja unter verschiedenen Variablennamen bekannt sein kann.

Wenn man vor dem Problem steht, dass man sich den Namen einer Variablen holen will, gibt es mehrere Möglichkeiten: 1. Man ist Anfänger, und hat einige Programmiergrundlagen noch nicht verstanden 2. Man ist Anfänger, und will etwas besonders trickreich-kreatives machen 3. Man weiß, was man tun will, aber weiß nicht, wie es geht

Für alle diese Fälle gibt es aber eine Lösung:

zu 1.: Man sollte ein Grundlagenbuch lesen, wie etwa Java ist auch eine Insel

zu 2.: Man sollte (hier im Forum) genau beschreiben, was man machen will. Dann bekommt man sicher einen Hinweis, wie man das gewünschte erreichen kann, ohne Variablennamen in dieser Form abfragen können zu müssen. Häufig kann man das vermutlich mit einer Map lösen, aber wie genau diese Map eingesetzt werden muss, ist vom konketen Ziel abhängig.

zu 3.: Dieser Punkt hätte auch lauten können: "Man will Reflection verwenden, kennt aber das reflection-Package nicht" Wenn man den Namen eines Fields erhalten will, kann man dafür die Klassen aus dem java.lang.reflect Package verwenden. Damit kann man z.B. die Namen aller Fields einer Klasse auflisten. Das wird aber nur sehr selten und in sehr speziellen Zusammenhängen verwendet. Wer sich dafür interessiert, kann sich das Reflection-Tutorial von Oracle (früher Sun) ansehen, oder das sehr umfangreiche Kapitel 25: Reflection und Annotationen aus dem Buch Java ist auch eine Insel.


Fragen

Das Thema wurde nicht ausreichend behandelt? Du hast Fragen dazu und brauchst weitere Informationen? Lass Dir von uns helfen!

Wir helfen dir gerne!


Dir hat dieser Artikel gefallen? Oder Du hast Fehler entdeckt und möchtest zur Berichtigung beitragen? Prima! Schreibe einen Kommentar!

Du musst angemeldet sein, um einen Kommentar abzugeben.

-- foobar 02.03.2008 | -- L-ectron-X 30.08.2013 (update)