• Es freut uns dass du in unser Minecraft Forum gefunden hast. Hier kannst du mit über 130.000 Minecraft Fans über Minecraft diskutieren, Fragen stellen und anderen helfen. In diesem Minecraft Forum kannst du auch nach Teammitgliedern, Administratoren, Moderatoren , Supporter oder Sponsoren suchen. Gerne kannst du im Offtopic Bereich unseres Minecraft Forums auch über nicht Minecraft spezifische Themen reden. Wir hoffen dir gefällt es in unserem Minecraft Forum!

Player ArrayList getName() Frage

ThrustLP

Redstoneengineer
Registriert
3 April 2013
Beiträge
35
Diamanten
0
Hallo!
Ich habe eine ArrayList

ArrayList<Player> players = new ArrayList<Player>();



Wenn ich jetzt mache:


players.add(p.getName());



Wird mir add angestrichen. Warum? Wie fixe ich das? <Player> muss bleiben.



Danke
 

ThrustLP

Redstoneengineer
Registriert
3 April 2013
Beiträge
35
Diamanten
0
Ok mein Problem ist wenn ich Player zu String ändere dann muss ich bei

Code:
Player playerOne = players.get(0);

Player auch zu String ändern und dann habe ich wieder einen Konflikt bei

Code:
playerOne.sendMessage()



Wie kann ich das ändern?
 

ThrustLP

Redstoneengineer
Registriert
3 April 2013
Beiträge
35
Diamanten
0
Ich glaub ich bin einfach zu dumm dafür D:

Also wenn ich ArrayList<String>

Habe kann ich nicht

Player p = (Player) players.get(0);

einfügen weil ich keinen String in einen Player umwandeln kann



Wenn ich ArrayList<Player>

Habe geht zwar

Player p = (Player) players.get(0);

aber eben wieder nicht

players.add()



Sorry aber ich bin Anfänger und dazu noch ziemlich unbegabt!
 

Paulomart

Schafhirte
Registriert
3 November 2013
Beiträge
147
Diamanten
0
Minecraft
Paulomart
Du speicherst die nicht nur Referenz. Deswegen bleibt es auch im RAM. Wenn der Spieler den Server wieder betritt gibt es ein neues Player Objekt.

Speichern Listen nicht einfach den Link zum Orginal?

Bei Variablen ist das ja so:

Code:
String bla1 = "sergdi";
String bla2 = bla1;

log(bla1); //sergdi
log(bla2); //sergdi

String bla1 = "nix";

log(bla1); //nix
log(bla2); //nix
 
G

games6471

Guest
Dafür dass die Referenz gehalten wird, bleibt das Objekt auch im Speicher und wird nicht vom Garbage Collector aufgesammelt.

Du kannst natürlich mit Weak-/SoftReferenzen (darunter fällt auch WeakHashMap o.ä.) arbeiten, aber ich würde dir eher raten den Spielernamen zu verwenden.
 
Zuletzt bearbeitet von einem Moderator:
G

games6471

Guest
Sind dann auch alle Referenzen auf dieses Objekt weg? Nein, da dein Plugin noch mit einer Referenz auf das Objekt zeigt. Es wird also noch nicht vom Garbage Collector aufgesammelt. Du kannst natürlich WeakReferenzen verwenden. Bei diesen wird das Objekt trotzdem gelöscht.

EDIT: Beachte, dass es mehrere Referenzen geben kann, die auf das selbe Objekt zeigen. Erst wenn es nicht mehr möglich ist auf das Objekt zuzugreifen wird es vom Garbage Collector aufgesammelt (nach einer gewissen Zeit).
 
Zuletzt bearbeitet von einem Moderator:

ImpactCP

Minecrafter
Registriert
21 Oktober 2012
Beiträge
22
Diamanten
0
Minecraft
ImpactCP
Sind dann auch alle Referenzen auf dieses Objekt weg? Nein, da dein Plugin noch mit einer Referenz auf das Objekt zeigt. Es wird also noch nicht vom Garbage Collector aufgesammelt. Du kannst natürlich WeakReferenzen verwenden. Bei diesen wird das Objekt trotzdem gelöscht.

EDIT: Beachte, dass es mehrere Referenzen geben kann, die auf das selbe Objekt zeigen. Erst wenn es nicht mehr möglich ist auf das Objekt zuzugreifen wird es vom Garbage Collector aufgesammelt (nach einer gewissen Zeit).

Oder es bleibt sehr lang im OldGen-Heap liegen ;)
 
Zuletzt bearbeitet:
Oben