Skocz do zawartości
  • 0

Globalna zmienna albo lista z eventem


pringles18
 Udostępnij

Pytanie

Siemka czy da radę stworzyć taką klasę, która ma listę i metodę i reaguje na event (w moim przypadku rozszerza thread)

PSEUDOKOD:

public class NpcReader extends Thread implements Listener {

List<MyNpc> mynpcs = new ArrayList<>();

public void run() {

i w tej metodzie tworzone są 3 obiekty mojej innej klasy

i przypisywane do globalnej zmiennej 

mynpcs.add(obiekty klasy MyNpc)

}

i posiadam w niej także event

@EventHandler
    public void PlayerJoin(PlayerJoinEvent e) {

i chciałbym w tym evencie móc odczytywać własne obiekty z listy mynpcs które stworzyły się w metodzie run(

tyle że w tym evencie ta lista jest pusta (nie znam sie ale chyba przy eventach tworzony jest nowy obiekt tej klasy więc nie widzi listy z tamtego obiektu)

}

no ogólnie chciałbym trzymać gdzieś utworzone obiekty w programie aby móc je później modyfikować

próbowałem zapisywać do pliku te obiekty i odczytywać ale już miałem problemy z notserializablexception

ale widzę też drugi problem że nie będe mógł ich później pewnie modyfikować więc wolałbym je trzymać od momentu utworzenia

w jakiejś liście czy jest to możliwe??

Edytowane przez pringles18
Odnośnik do komentarza
Udostępnij na innych stronach

3 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0

Niezbyt wiem o co Ci chodzi, opisałeś problem bardzo chaotycznie, ale jeżeli chcesz uzyskać dostęp do listy, która jest w innej klasie niż reszta kodu to możesz na przykład stworzyć sobie storage, do którego będziesz wrzucał graczy

public class PlayerStorage {
	private List<Player> players;
      
      public List<Player> getPlayers() {
      	return players;
      }
}

i wtedy w każdej klasie tworzysz sobie konstruktor, na przykład jeżeli chcesz używać go w listenerze to tworzysz sobie nowy obiekt Storage w main

private PlayerStorage playerStorage = new PlayerStorage();

i podajesz obiekt

pluginManager.registerEvents(new JoinListener(playerStorage), this);

 

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0

A czy nie będzie po prostu lepiej tutaj użyć statycznej metody zamiast tworzyć obiekt? Przecież i tak byśmy działali na finalnej liście

public final class Klasa {

	private Klasa() {}

	private final static List<UUID> UUID_LIST = new ArrayList<>();
      
    public static void add(UUID uuid) {
    	UUID_LIST.add(uuid);  
    }
      
    public static void remove(UUID uuid) {
    	UUID_LIST.remove(uuid);  
    }
 
}

A w jakiejś klasie tylko:

Klasa.add();

Klasa.remove();

 

Ewentualnie zamiast listy możesz użyć Set

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0

Na dłuższą metę będzie to uciążliwe, większość metod jakie stworzy nie będą statyczne, więc nie będzie mógł używać w nich pól statycznych. Zresztą dlaczego w języku OOP (object oriented programming) miałbyś unikać tworzenia... obiektów? 

Odnośnik do komentarza
Udostępnij na innych stronach

Nieaktywny
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
 Udostępnij

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...