Erste Schritte Getter und Setter

GGK_01

Bekanntes Mitglied
Hallo,

ich habe so meine Problem mit den Getter und Setter Methoden bzw. deren aufruf aus anderen Klassen.
Eclipse schlägt mir immer vor, die Methoden oder Variablen Statisch zu machen...aber genau das heisst es doch...soll vermieden werden.

Bitte 1: Ich habe kleines Beispiel erfunden wo genau das passiert und bitte um Unterstützung wie ich das am saubersten umsetze.
Frage 1: was sind die Nachteile von statischen Variablen / Methoden.

Klasse1:
Java:
import java.awt.BorderLayout;

public class GetterSetter extends JFrame {

	private JPanel contentPane;
	private JTextField textFieldLable;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					GetterSetter frame = new GetterSetter();
					frame.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the frame.
	 */
	public GetterSetter() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		textFieldLable = new JTextField("HI");
		textFieldLable.setBounds(10, 11, 86, 20);
		contentPane.add(textFieldLable);
		textFieldLable.setColumns(10);
		
		System.out.println(getJTextField());
	}
	
	public void setJTextField(JTextField textFieldLable) {
		this.textFieldLable=textFieldLable;
	}
	
	public String getJTextField() {
		return this.textFieldLable.getText();
		
	}
}

Klasse 2:
Java:
public class RunClass {
	
	
	
	public void DataCollection() {
		String getText = GetterSetter.getJTextField();
		System.out.println();
	}

}

Danke sehr!

GGK
 
Java:
public class RunClass {
    public void DataCollection() {
        String getText = GetterSetter.getJTextField();
        System.out.println();
    }
}

Der Grund warum Eclipse vorschlägt die getMethode static zu machen, liegt genau an dem Aufruf dieser Methode in der Klasse. Denn
Code:
GetterSetter.<irgendwas>
bedeutet ich greife auf Variablen oder Methoden der Klasse zu ohne eine Instanz der Klasse zu verwenden.
RunClass kennt im Konstruktor kein Objekt der Klasse GetterSetter.

Was genau möchtest du realisieren?
 
ich möchte den Inhalt des JTextFields aus einer anderen Klasse aufrufen und dort als Variable weiter verwenden.

Dann sollte ich das so lösen?
Java:
	public void DataCollection() {
		
		GetterSetter getField = new GetterSetter();
		
		
		System.out.println(getField.getJTextField());
	}

GGK
 
Zuletzt bearbeitet:
Ich würde vielleicht noch einen anderen Variblennamen wählen, aber ansonsten kannst du es so machen, genau.

Edit: Mach dir aber noch einmal genau den Unterschied zwischen statischen und nicht-statischen Elementen deiner Klasse klar. Kennst du ihn?
 
Zuletzt bearbeitet:
Ok..dann glaub ich das mal dauerhaft kapiert zu haben...

Der Variablenamen ist nur ein schnelles Beispiel...

Danke Dir!

GGK
 
Während nicht-statische Elemente direkten Bezug auf ein Objekt der Klasse haben, sei es, dass es sich um Instanz-Variablen oder Instanz-Methoden handelt, benötigst du dafür immer ein direktes Objekt der Klasse.

Statische Elemente, zum Beispiel eine statische Variable, die die Anzahl der bereits erzeugten Objekte speichert, kannst du ohne ein Objekt direkt aufrufen.

Beispiel:

Java:
public class Auto{

static int anzahl = 0;
public Auto() { 
 anzahl ++;
}

}

Hierbei kannst du aus der Main heraus, direkt auf die statische Variable anzahl zugreifen.

  • Befindest du dich in der Klasse: (Aufruf)
    Java:
    anzahl
  • Befindest du dich in einer anderen Klasse: (Aufruf)
    Java:
    Auto.anzahl
 
Zuletzt bearbeitet:
Ich habe eben bemerkt, dass die Setter Methode keinen Einfluss auf das Ergebnis - nämlich den Zugriff von der Klasse RunClass auf das JTextField hat.

Weshalb ist das denn so und wofür wird dann die Setter benötigt?

GGK
 
Getter sind dazu da, Attribute einer Klasse auszulesen.
Setter um diese von ausserhalb zu ändern und eventuell Prüfungen auf dem übergebenen Objekt durchzuführen. Nicht immer müssen/dürfen Klassenvariablen von aussen verändert werden, in dem Fall darfst du keinen Setter anbieten.
 

Zurück
Oben