Da getText()
es nicht statisch ist, können Sie es nicht über eine statische Methode aufrufen.
Um zu verstehen warum, muss man den Unterschied zwischen den beiden verstehen.
Instanzmethoden (nicht statisch) arbeiten mit Objekten eines bestimmten Typs (der Klasse). Diese werden mit dem neuen wie folgt erstellt:
SomeClass myObject = new SomeClass();
Um eine Instanzmethode aufzurufen, rufen Sie sie auf der Instanz ( myObject
) auf:
myObject.getText(...)
Eine statische Methode / ein statisches Feld kann jedoch nur für den Typ direkt aufgerufen werden. Sagen Sie Folgendes:
Die vorherige Anweisung ist nicht korrekt. Man kann auch auf statische Felder mit einer Objektreferenz wie verweisen myObject.staticMethod()
, dies wird jedoch nicht empfohlen, da nicht klar ist, dass es sich um Klassenvariablen handelt.
... = SomeClass.final
Und die beiden können nicht zusammenarbeiten, da sie unterschiedliche Datenräume (Instanzdaten und Klassendaten) bearbeiten.
Lass mich versuchen zu erklären. Betrachten Sie diese Klasse (Pseudocode):
class Test {
string somedata = "99";
string getText() { return somedata; }
static string TTT = "0";
}
Jetzt habe ich folgenden Anwendungsfall:
Test item1 = new Test();
item1.somedata = "200";
Test item2 = new Test();
Test.TTT = "1";
Was sind die Werte?
Gut
in item1 TTT = 1 and somedata = 200
in item2 TTT = 1 and somedata = 99
Mit anderen Worten, TTT
ist ein Datum, das von allen Instanzen des Typs gemeinsam genutzt wird. Es macht also keinen Sinn zu sagen
class Test {
string somedata = "99";
string getText() { return somedata; }
static string TTT = getText(); // error there is is no somedata at this point
}
Die Frage ist also, warum TTT statisch ist oder warum getText () nicht statisch ist.
Entfernen Sie das static
und es sollte diesen Fehler überwinden - aber ohne zu verstehen, was Ihr Typ tut, ist es nur ein Heftpflaster bis zum nächsten Fehler. Was sind die Anforderungen dafür getText()
, dass es nicht statisch sein muss?