Referenznamen zusammensetzen

NichtSchlau

Mitglied
Gibt es eine Möglichkeit, einen Referenznamen zusammensetzen zu können um daruaf zuzugreifen, also in der Art

Teil1derimVariabelNamenDerImmerGleichIst+Teil2derImmerAndersIst.ImmgerGleicheMethode();


In diesem falle lässt es sich nicht anders machen.


Gibt es dazu eine Methode der Runtime?

sowas wie Runetime.getRunetime().getReferenceByName("String"+"String2")



MfG
 
Zuletzt bearbeitet:

faetzminator

Gesperrter Benutzer
Sprichst du von Klassenvariablen mit Namen wie "foo0", "foo1", "foo2" etc.? Per Reflection können Methoden und Klassenvariablen ausgelesen werden, aber meist wird das durch eine schlechte Architektur verursacht. Was willst du ganz grundsätzlich machen?
 
G

Gast2

Gast
eine abstracte Klasse Variable - dazu entsprechende Implementierungen - etwas Operatorüberladung ... damit funktioniert das auch ... aber das willst Du sicherlich nicht :noe:

ich schließe mich der Frage von Faetzinator an

Nachtrag: über eine HashTable könnte es funktionieren ... dazu muss aber jeder Variable enthalten sein
 

NichtSchlau

Mitglied
Danke für die Antworten.


Also genauer. Es existieren eine belieibige Anzahl von Objekten, die alle der Art Objektname1, Objektname2 aufgelistet sind,

das kann ich nicht ändern, das ist so vorgegeben und ensteht im laufenden und ist in Code dessen Quellcode nicht frei ist so beschrieben.


Ich will bei jedem einzelnen Objekname1 bis zu dem höchsten was es gibt nacheinander die selbe Methode aufrufen.


Das konnte mir nun nicht so wirklich helfen,

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

Verstehe ich nun nicht recht, gehören die --> nun dazu?

Weder
Obektname'Shortzahl'.bestimmteMethodeDieObjektname1Besitzt()

noch

Objektname-->'Shortzahl'.bestimmteMethodeDieObjektname1Besitzt()


funzt.



MfG
 
M

maki

Gast
Weder
Obektname'Shortzahl'.bestimmteMethodeDieObjektname1Besitzt()

noch

Objektname-->'Shortzahl'.bestimmteMethodeDieObjektname1Besitzt()


funzt.
Ist ja auch beides kein Java ;)
Das steht aber auch im link...

Also genauer. Es existieren eine belieibige Anzahl von Objekten, die alle der Art Objektname1, Objektname2 aufgelistet sind,
Wo sind diese Objekte denn?
In einer Liste?
Haben sie alle ein gemeinsames Interface?
 

NichtSchlau

Mitglied
Die Dinger flattern frei ohne Liste oder Array herum,

um sie in ein Array zu bekommen müsste ich ja auch erst jeden einzelnen Referenznamen kriegen, da ich ja wie schon erwähnt nicht an den Quelltext komme :(


Sie sind Objekte der gleichen Klasse und die ersten Buchstaben des Namens sind gleich, sonst haben sie keine Gemeinsamkeit.


MfG
 

faetzminator

Gesperrter Benutzer
Das ist doch in diesem Falle vollkommen gleich, es hilft mir nicht beim Aufruf.
Das ist völlig relevant, nur Klassen- und Instanzvariablen könnte man noch generisch per Reflection ansprechen.
Sie sind weder Klassen noch Instanzfelder sondern einfach "frei herumflattern" in einer Methode definiert.
Dann muss man das von Hand machen. Da muss man aber nichts generisches haben, da man sowieso alle Variablen kennt.
 

Marco13

Top Contributor
*seufz*
Java:
import java.lang.reflect.Field;

class Crappy
{
    public String string0 = "This";
    public String string1 = "is";
    public String string2 = "wierd";
}


class CrappyTest
{
    public static void main(String args[]) throws Exception
    {
        Crappy c = new Crappy();

        forAll("string", c);
    }

    public static void forAll(String prefix, Object object) throws Exception
    {
        Field fields[] = object.getClass().getFields();
        for (Field field : fields)
        {
            if (field.getName().startsWith(prefix))
            {
                forThis(field.get(object));
            }
        }
    }

    public static void forThis(Object object)
    {
        String s = (String)object;
        System.out.println(s);
    }

}
 
M

maki

Gast
Das ist doch in diesem Falle vollkommen gleich, es hilft mir nicht beim Aufruf.

Sie sind weder Klassen noch Instanzfelder sondern einfach "frei herumflattern" in einer Methode definiert.
Das ist nicht egal ;)

Wenn es keine Instanz- bzw Klassenvariablen sind, kannst du sie nicht per Reflection ansprechen -> keine Chance, kannst gleich aufhören ;)
 

NichtSchlau

Mitglied
Es muss doch eine Möglichkeit der Art geben wie

Java:
Runtime.getRunetime().getObjektByReference("ErsterteildesReferenznamens""ZweiterTeilDesReferenzNamens").Methode();

Oder ganz anders, aber irgendwie muss doch das Zusammensetzen eines Referenznamens in einer Hochsprache möglich sein.



MfG
 

faetzminator

Gesperrter Benutzer
Um es nochmals generell auszudrücken bzw. zusammenzufassen:
1. Im normalen (und von mir ausgesehen (meist) einzig richtigen) Fall gibt es im Objekt eine Referenz auf einen geeigneten Container für die Daten, z.B. eine List, ein Set oder eine Map
2. Die Daten liegen "ungeordnet" als einzelne Objekte im Objekt. Da kann man mit Reflection darauf zugreifen, ist aber grundsätzlich kein schöner Stil.
3. (Dein Fall:) Die Daten wurden alle lediglich lokal in einer Methode / in einem Block erstellt bzw. ungeordnet gesammelt. Diese müssen von Hand verarbeitet werden.
 
S

SlaterB

Gast
das kann ich nicht ändern, das ist so vorgegeben und ensteht im laufenden und ist in Code dessen Quellcode nicht frei ist so beschrieben.
+
Sie sind weder Klassen noch Instanzfelder sondern einfach "frei herumflattern" in einer Methode definiert.

Variablen die in einer Methode (X) definiert sind, sind nur bis zum Ende der Methode sichtbar,
von außen kommst du da überhaupt nicht ran,
weder vor der Methode (wie auch, existieren nicht) noch nach der Methode (dito),
am ehesten noch während der Methode, entweder in einem zufällig gleichzeitig ablaufenden separaten Thread oder geschickter innerhalb einer Methode, die von der anderen Methode X aufgerufen wird,
in beiden Fällen gibt es aber absolut keinen Zugriff auf die anderen Daten, von Java nicht unterstützt, der Stack-Arbeitsspeicher hoffentlich geschützt

die einzig sinnvolle Verwendung von lokalen Variablen ist innerhalb der Methode,
wenn du also den hinteren Teil der Methode doch als Quelltext bearbeiten kannst,
dann wirst du doch hoffentlich die Variablennamen sehen,
dann kannst du die zugehörigen Objekte sammeln und in einer Map ablegen,

problematischer wirds, wenn den Variablen neue Werte zugewiesen werden müssen, wenn auch nicht undenkbar,
da du aber bestimmt eh eine andere Situation hast, ist das nur theoretisch
 

Ähnliche Java Themen

Neue Themen


Oben