Objektnamen in Java dynamisch erstellen
  • Ich habe schon etwas gegoogelt, aber nichts gutes gefunden, bzw. nur dinge gefunden, die für Delphi geeignet sind.
    Mein problem ist, wie der Titel schon sagt, dass ich einen Objektnamen dynamisch erzeugen lassen muss und die namen dann auch in einem array speichern lassen muss, brauche das ganze für ein informatik projekt bei uns in der schule.

    das mit dem array ist ja kein problem, ist ja recht ähnlich zu PHP, aber wie ich den objektnamen dynamisch erzeugen lassen soll (am besten nach dem motto: ob_1, ob_2 ..., ob_x) weiss ich leider nicht :-(

    da ich weiss, dass hier einige Java ja durchaus gut können, hoffe ich, dass mir jmd dabei helfen kann. ein beispiel dafür würde mir reichen, umschreiben könnte ich das dann wohl alleine.

    bin nicht so der java pro und kenne leider keine seiten wo ich da bestimmt nachfragen könnte.

    Nikolas

  • 6 Answers sorted by
  • Also in Java kann man ein PHP Array am besten mit einer HashMap umsetzen:

    java.lang.HashMap myHashMap = new java.lang.HashMap();<br />int objectCount = 10; //Wieviele Objekte sollen erstellt werden?<br />for (int i = 0; i < objectCount; i++) {<br /> TheObject newObject = new TheObject();<br /> myHashMap.put("Object_" + i, newObject)<br />}

    Und die Namen der Objekte kann man auch leicht dynamisch erstellen lassen, wie am Beispiel zu sehen.

    Weiß aber nicht ob dies das ist was du meintest.

  • aufgrund deines kommentares im code, habe ich eine frage: muss ich vorher angeben, wieviele neue objekte erstellt werden sollen? weil das will ich nicht, das objekt wird erstellt, wenn ich eine taste auf der tastatur drücke, dass habe ich auch schon geschrieben, aber bis jetzt kann ich so nur ein objekt neu erzeugen lassen, als bsp. Objekt_1, nun will ich aber, dass wenn ich die taste nochmal drücke, das objekt Objekt_2 erstellt wird usw., halt bei jedem tastendruck ein neues objekt erzeugt wird.

    wie gesagt, kenne mich mit java nicht so gut aus, von daher stelle ich die frage lieber zur sicherheit

  • dann mußt du dir irgendwo in einer Variablen merken, wieviele Objekte du schon erstellt hast.
    Du wirst ja sicherlich eine Klasse geschrieben haben in der du alles verwaltest.

    vielleicht kannst ja mal deinen Code (zumindest die wichtigen Stellen) posten.

  • das ist leider das problem, auf meiner frage würde das ganze aufbauen, daher habe ich nur die idee wie ich das machen soll.

    meine idee ist halt, dass wenn ich eine taste drücke, ein neues objekt erstellt wird, und das bekommt einen namen, der erzeugt wird aus einem anderen code, also würde ich die anzahl der erzeugen objekte abspeichern (als int) und dann noch ein Array erstellen lassen, welches alle namen speichert, das kann ich beides wohl, ist ja nicht so schwer, nur wie gesagt, das erzeugen des objekts ist das problem, einfach aufgrund des namen

  • ich würde es so gestalten :
    alles in nen array/vector stopfen und dann per indexes auf die elemente zugreifen.
    einen namane kannste dem objekt ja im konstruktor zB als string übergeben

    also einfach nen generischen vector nehmen, da der eine dynamische größe besitzt und dann da die objekte reinstopfen *G*
    hier mal die class java.util.Vector

    du hast einmal das object was erzeugt werden soll :
    den namen übergibst du einfach im konstruktor und speicherst den in der class
    <br /><b>CLASS "myDynObject"</b><br />class myDynObject{<br /><br />private String name;<br /><br />// im konstruktor übergebenen namen klassenglobal speichern<br />myDynObject(String name){<br /> this.name = name;<br />}<br /><br />// eine kleine funktion um den namen zu holen<br />public String getName(){<br /> return this.name;<br />}<br /><br />}<br /><br />

    dann haste deine class mit der du die objekte erstellst.
    bei dir wwie ihch es verstehe auf grund eines keyEvents

    <br /><b>CLASS "main"</b><br />import java.util.Vector;<br /><br />public class main {<br /><br /> /**<br /> *<a href="/profile/param"> @param</a> args<br /> */<br /> public static void main(String[] args) {<br /> // einen vector (generisch) zum speichern der objekte verwenden,<br /> // da dieser eine "dynamische" grösse besitzt<br /> Vector<myDynObject> myElements = new Vector<myDynObject>();<br /> <br /> // elemente adden<br /> myElements.add(new myDynObject("obj0"));<br /> myElements.add(new myDynObject("obj1"));<br /> myElements.add(new myDynObject("obj2"));<br /> myElements.add(new myDynObject("obj3"));<br /> myElements.add(new myDynObject("obj4"));<br /> myElements.add(new myDynObject("obj5"));<br /> myElements.add(new myDynObject("obj6"));<br /> myElements.add(new myDynObject("obj7"));<br /> <br /> // 4tes (index 3) element holen mit<br /> // der methode get(int index)<br /> <br /> myDynObject hallo = myElements.get(3);<br /> <br /> // jetzt das object verwenden, zB namen abfragen<br /> System.out.println(hallo.getName());<br /><br /> // ausgabe : "obj3"<br /> }<br /><br />}<br /><br />

    p.s. denk dran, um generisch klassen zu verwenden das ganze mit java >= 1.5 "compilieren"


    entweder kannste jetzt per index direkt auf die objekte bzw deren namen zugreifen, oder du schreibst dir eine schleife, die die objekte anhand der namen holt zB sowas :

    wenn du jetzt zB getObjectByName("obj4) aufrufts, liefert dir das ding das objekt zurück, dem du den namen "obj4" übergeben hast im konstruktor
    <br />public myDynObject getObjectByName(String name){<br />for (int i=0;i<myElements.size();i++{<br />if (myElements.get(i).getName().equals(name)){<br />return myElements.get(i);<br />}<br />}<br />return null;<br />}<br />

    wie gesagt ist nur nen ansatz wie ich es machen würde, das von webmatze ist aber mindestens ebenso gut wenn nicht sogar besser, da HashMap eigentlich das macht was ich hier mal on hand demonstriert habe. hashMap ist auch dynamisch und braucht keine feste länge. bei einem keyEvent einfach put() aufrufen und ein objekt mit seinem key reinschreiben. wenn du aufs object zugreifen willst, einfach per get(String key) holen.

    bei hash map ein weiteres hinzuzufügen kannste einfach so machen :

    <br /><b>CLASS "test^^"</b><br />import java.lang.HashMap <br /><br />private HashMap myElements; <br /><br />test(){<br /> this.myElements = new HashMap();<br />}<br /><br />public void putObject(Object object){<br /> this.myElements.put("Object_" + this.myElements.size(), object);<br />}<br /><br />public Object getObject(String name){<br /> return this.myElements.get(name);<br />}<br /><br />}<br />

    ich bin mir aber nicht sicher, ob hashMap beliebig erweiterbar ist oder ob man der am anfang übergeben muss wie groß sie sein soll
    "Constructs an empty HashMap with the default initial capacity (16) and the default load factor (0.75)."

    musste einfach mal testen. das ganze was ich mal von hand gezeigt habe ist auf jedenfall beliebig groß/erweiterbar

  • das mit dem beliebig4 erweiterbar ist wichtig, da ich insgesammt 3 verschiende klassen bzw. objekttypen habe, diese aber sehr oft, bzw. so oft es der nutzer will erstellen lasse. danke euch beiden aufjedenfall, werde hier posten, falls ich ein problem habe

Willkommen!

It looks like you're new here. If you want to get involved, click one of these buttons!

Einloggen Registrierung!

Diskussionsteilnehmer

Who's Online (0)