2017-12-20 4 views
1

Ich versuche zu minimieren, wie viel ich eine Instanz erstellen, da ich in Java nicht besonders geschickt bin. Zur Zeit habe ich eine Reihe von Instanzen anderer Klassen in meinem Main, ein kurzes Beispiel ...Wie referenziere ich Instanzen, die eine Instanz verwenden?

public final class ClassName extends JavaPlugin { 

    AntiSwear antiSwear = new AntiSwear(); 
    Spam spam = new Spam(); 

    @Override 
    public void onEnable() { 
     // Plugin startup logic 
    } 

    @Override 
    public void onDisable() { 
     // Plugin shutdown logic 
    } 
} 

Und statt immer mehr Instanzen machen, ich möchte nur eine Instanz der Hauptklasse machen, ClassName className = new ClassName(); und Führen Sie etwas wie className.spam...

Grundsätzlich, um mein Kauderwelsch in Englisch zu setzen: Ich möchte nur sehen, wie Instanzen mit einer Instanz zu referenzieren.

+2

'className.spam' sollte –

+0

funktioniert das' static' Schlüsselwort Abdeckung, was Sie brauchen? –

+0

@PaulHicks das 'statische' hat funktioniert :) Danke – VeeAyeInIn

Antwort

3

Es gibt ein paar Möglichkeiten, dies zu tun. Der erste Weg ist die public Zugriffsmodifikator zu verwenden:

public AntiSwear antiSwear = new AntiSwear(); 
public Spam spam = new Spam(); 

Dies macht die Instanzen zugänglich von einer Instanz von ClassName, zum Beispiel:

ClassName className = new ClassName(); 
className.spam...; 
className.antiSwear...; 

Das zweite Verfahren beinhaltet gettersand setters, das ein Verfahren bereitzustellen, das kann von jeder Klasse aufgerufen werden, die eine Instanz enthält und Zugriff hat, oder durch eine Unterklasse:

AntiSwear antiSwear = new AntiSwear(); 
Spam spam = new Spam(); 

public AntiSwear getAnitSwear(){ 
    return this.antiSwear; 
} 
public Spam getAnitSwear(){ 
    return this.spam; 
} 

Jetzt können Sie die Getter entsprechend aufrufen:

ClassName className = new ClassName(); 
className.getSpam()...; 
className.getAntiSwear()...; 

Das dritte Verfahren beinhaltet die static Zugriffsmodifikator:

public static AntiSwear antiSwear = new AntiSwear(); 
public static Spam spam = new Spam(); 

Dies macht die Instanzen zugänglich von jeder externe Klasse, auch jene, die nicht tun enthält eine Instanz. Dies liegt daran:

static Mitglieder gehören zur Klasse anstelle eine bestimmte Instanz.

Es bedeutet, dass nur eine Instanz eines static Feld selbst liegt vor, wenn Sie eine Million Instanzen der Klasse erstellen oder Sie jede nicht erstellen. Es wird von allen Instanzen geteilt.

Zum Beispiel:

//Notice that I am not creating an instance, I am only using the class name 
ClassName.spam...; 
ClassName.antiSwear...; 
+0

Bemerkenswerterweise ist für Minecraft Mods das einzige, was wirklich statisch sein muss, ein Verweis auf die Haupt-Mod-Klassen-Instanz selbst. Forge macht das ziemlich * für * Sie (ich weiß nichts über Bukkit, usw.), so dass Sie zum Beispiel mit 'ClassName.classNameInstance.spam' enden, da die Haupt-Mod-Klasse im Wesentlichen ein [Singleton] ist (https: //en.wikipedia.org/wiki/Singleton_pattern). – Draco18s

Verwandte Themen