Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
wie kann ich alle instanzen einer Klasse durchsehen, ohne, dass diese in einer Liste erzeugt wurden?
Hallo
Ich habe eine Klasse, von der 16 instanzen erzeugt werden.
aber sie entstehen in Eigenständigen Zeilen, nicht in einer Liste.
Wie kann ich jetzt eine Funktion all diese Instanzen nach einem bestimmten Wert durchprüfen lassen?
Gar nicht. Du hast da erst einmal keinen direkten Zugriff auf alle Instanzen. Wenn Du einen solchen Zugriff wünscht, dann musst Du eine entsprechende Verwaltung schreiben. Aber das kommt mit Folgeproblemen, daher wäre die erste Frage, was Du genau vor hast. Auf den ersten Blick sieht das nach einem nicht gut durchdachten Konzept aus.
Eigentlich send es 2 Klassen, die je 16 instanzen haben
Beide Klassen haben eine Variable, die bei jeder Instanz einen anderen Wert hat.
Diese 16 Werte gibt es in beiden Klassen
In den Instanzen der ersten klasse will ich nach der Instanz der zweiten suchen, die den übereinstimmenden Wert in der Variable hat, um die so zu Paaren zu verknüpfen.
Die Instanzen dieser Klassen entstehen etwas speziell.
Es sind Minecraft-Items.
Java:
public static final RegistryObject<Item> BLACK_UMBRELLA = ITEMS.register("black_umbrella", () -> new UmbrellaItem("black",
new Item.Properties().defaultMaxDamage(0).group(Umbrella.UMBRELLAS).maxStackSize(1).rarity(Rarity.COMMON).setNoRepair()));
public static final RegistryObject<Item> BLACK_UMBRELLA_CLOSE = ITEMS.register("black_umbrella_close", () -> new UmbrellaCloseItem("black",
new Item.Properties().defaultMaxDamage(0).maxStackSize(1).rarity(Rarity.COMMON).setNoRepair()));
Das Beispiel zeigt je eine Instanz beider klassen (hier die schwarzen Varianten).
Wie gesagt, es gibt je 16 davon für 16 verschiedene Farben.
Die beiden Instanzen der gleichen Farbe sollen jeweils interagieren, um den effekt zu erzeugen, dass der Schirm auf klick geöffnet und geschlossen wird.
in einer anderen ähnlichen Situation hatte ich schon mal probleme mit sowas in einer Liste.
Die Items konnten im Inventar nicht richtig angezeigt werden.
Mit Minecraft kenn ich mich nicht aus, aber du weißt doch schon, dass BLACK_UMBRELLA und BLACK_UMBRELLA_CLOSE zusammengehören. Das wird sich wohl auch nicht ändern. Dann gruppiere halt einfach alle, die zusammen gehören.
Ich bin mir nicht ganz sicher, wie man die in Java gruppiert.
Ich habe mir nur gedacht, dass jede Instanz mit der Farb-Angabe in ihrer String-variable nach ihren gegenstück suchen können soll.
So nach dem Motto: entspricht die eigene Farbengabe der in der anderen Instanz, dann tu was
Ich bin mir nicht ganz sicher, wie man die in Java gruppiert.
Ich habe mir nur gedacht, dass jede Instanz mit der Farb-Angabe in ihrer String-variable nach ihren gegenstück suchen können soll.
Was machst du denn, wenn du die beiden gefunden hast?
[CODE lang="java" title="Angenommen, das würde funktionieren:"]RegistryObject<Item> found = BLACK_UMBRELLA.findCounterPart(); // findet den BLACK_UMBRELLA_CLOSE[/CODE]
in einer anderen ähnlichen Situation hatte ich schon mal probleme mit sowas in einer Liste.
Die Items konnten im Inventar nicht richtig angezeigt werden.
@Override
public ActionResult<ItemStack> onItemRightClick(World worldIn, PlayerEntity playerIn, Hand handIn)
{
}
Darin wlii ich das gegenstück finden, um das getragene item zu wechseln, damit es wie öffnen und schließen aussieht.
Die instanzen tragen jeweils ihre Farbe als String.
Meine ide ist, hier drin irgendwie zu prüfen, ob die Farbangabe von einer der instanzen der anderen Klasse mit der eigenen übereinstimmt nid dann den wechsel zur so erkannten instanz auszuführen
Erst mal fällt mir nur so etwas ein:
Java:
if (color == "black")
{
itemstack = new ItemStack(UmbrellaItems.BLACK_UMBRELLA_CLOSE.get());
}
"color" ist dabei die string-variable, die per constructor den betreffenden Wert zugewiesen bekommt.
Allerdings mussich dafür 16 solche If-Prüfungen untereinander stapeln, eine für jede Farbe.
Ich dachte bloß, ich könnte eine elegantere lösung finden.
Meine ide ist, hier drin irgendwie zu prüfen, ob die Farbangabe von einer der instanzen der anderen Klasse mit der eigenen übereinstimmt nid dann den wechsel zur so erkannten instanz auszuführen
Du kannst ja bei der Erzeugung der Instanz im Konstruktor gleich die Instanz der passenden anderen Klasse mitgeben und die in einer Instanzvariablen zwischenspeichern. Dann hast du immer Zugriff darauf, wenn du ihn benötigst.