Poiché getText()
non è statico, non puoi chiamarlo da un metodo statico.
Per capire perché, devi capire la differenza tra i due.
I metodi di istanza (non statici) funzionano su oggetti di un tipo particolare (la classe). Questi vengono creati con il nuovo in questo modo:
SomeClass myObject = new SomeClass();
Per chiamare un metodo di istanza, chiamalo su instance ( myObject
):
myObject.getText(...)
Tuttavia un metodo / campo statico può essere chiamato direttamente solo sul tipo, ad esempio in questo modo:
L'istruzione precedente non è corretta. Si può anche fare riferimento a campi statici con un riferimento a un oggetto come, myObject.staticMethod()
ma questo è sconsigliato perché non chiarisce che si tratta di variabili di classe.
... = SomeClass.final
E i due non possono lavorare insieme poiché operano su spazi dati diversi (dati di istanza e dati di classe)
Fammi provare a spiegare. Considera questa classe (psuedocode):
class Test {
string somedata = "99";
string getText() { return somedata; }
static string TTT = "0";
}
Ora ho il seguente caso d'uso:
Test item1 = new Test();
item1.somedata = "200";
Test item2 = new Test();
Test.TTT = "1";
Quali sono i valori?
Bene
in item1 TTT = 1 and somedata = 200
in item2 TTT = 1 and somedata = 99
In altre parole, TTT
è un dato condiviso da tutte le istanze del tipo. Quindi non ha senso dirlo
class Test {
string somedata = "99";
string getText() { return somedata; }
static string TTT = getText(); // error there is is no somedata at this point
}
Quindi la domanda è: perché TTT è statico o perché getText () non è statico?
Rimuovi il static
e dovrebbe superare questo errore, ma senza capire cosa fa il tuo tipo è solo un cerotto fino all'errore successivo. Quali sono i requisiti getText()
che richiedono che sia non statico?