[Spigot 1.17] Methode aus anderer Klasse verwenden?

3 Antworten

Dein Code sieht aus wie ein missglückter Versuch, ein Singleton zu kreieren. Eine solche Implementation müsste dann aber wie folgt aussehen:

public class Api {
  private static Api instance;

  protected Api() {
  }

  public static API getInstance() {
    if (instance == null) {
      instance = new Api();
    }

    return instance;
  }

  @Override
  public String toString() {
    return "§cThis is an API";
  }
}

Weder Feld, noch Konstruktor sind von außen aufrufbar. Wenn du mit getAPI die Klasse beschreiben wolltest, wäre das Überschreiben der toString-Methode sinnvoller.

Und wie heißt d as fachsprachlich, dass wenn man Methoden aus anderen Klassen verwendet?

Methodenaufruf passt auch für diesen Fall.


verreisterNutzer  20.10.2021, 19:24

Was bedeutet instance eigentlich konkret? Außer jetzt die wörtliche Übersetzung.

regex9  20.10.2021, 23:43
@verreisterNutzer

Eine Singleton-Klasse (hier: Api) hat im gesamten Programm nur eine einzige Instanz. Deshalb wird der Konstruktor für äußeren Zugriff gesperrt (Sichtbarkeit protected oder private) und die getInstance-Methode übernimmt stattdessen das Anlegen (und Herausgeben). Das Feld instance speichert die angelegte Instanz. Wenn du getInstance mehrmals aufrufen würdest, wird nur beim allerersten Aufruf, wenn das Api-Objekt noch nicht existiert, eines angelegt und in instance gespeichert. In Folgeaufrufen kann anhand des Zustands von instance geprüft werden, ob es bereits eine Instanz gibt (die dann auch weiterverwendet wird) oder ob sie noch angelegt werden muss.

Die Variable instance ist nicht initialisiert. Du musst vorher den Konstruktor mit new API(); aufrufen, damit auch die Variable instance gesetzt wird. Dann macht es aber wenig Sinn die Funktionen und die Variable als static zu deklarieren, weil du ja sowieso eine Instanz von der Klasse API haben willst. Also alle "Static" weg und dann folgenden Code:

API api = new API();
api.getInstance().getAPI();

verreisterNutzer  20.10.2021, 17:09

Kann man die 2 Zeilen auch als eine schreiben?

chriss1967  20.10.2021, 17:12
@verreisterNutzer

Ja natürlich. Aber dann macht die Instanz keinen Sinn. Du würdest ja dann jedes Mal eine neue Instanz erstellen, wenn du den Aufruf machst. Dann kannst du die Instanz variable auch ganz weg lassen und die ganze Klasse static machen

verreisterNutzer  20.10.2021, 19:01
@chriss1967

Beim Hovern über getZahl erscheint folgende Meldung:

Result of 'TimerAPI.getZahl()' is ignored

onEnable in Main.java:

TimerAPI timerapi = new TimerAPI();
timerapi.getZahl();

TimerAPI.java:

public class TimerAPI {

    private int Zahl = 3;

    public int getZahl(){
        return Zahl;
    }

Dieses Problem habe ich jetzt schon die ganze Zeit, ich habe es schon mit einem String (Natürlich eine anders aufgebaute Methode) anstelle von int versucht.

Wenn du mit der Zahl natürlich was anstellen willst, musst du das Ergebnis der Funktion "getZahl()" natürlich noch in einer variable speichern.

Also

int zahl = timerapi.getZahl();

Ich vermute Mal du bist noch neu im programmieren. Schau dir am besten Mal ein paar YouTube Videos zum Thema programmieren mit Java an. :)


verreisterNutzer  20.10.2021, 19:10

Neu bin ich nicht, ich lerne.

chriss1967  21.10.2021, 08:25
@verreisterNutzer

Auch zum lernen helfen YouTube Videos. Ich hab auch damit angefangen und mir immer viel auf YouTube angeschaut und die Grundlagen zu verstehen